Pascal. Вещественные числа


var r: real;
r := 5.0;

Значение 5.0 - число, представленное в виде десятичной дроби (имеет целую и дробную часть). В информатике такие числа называются вещественными
Вещественное число - это число, в котором есть целая и дробная части. Целая и дробная часть отделяются друг от друга точкой, а не запятой как в математике.
Даже если дробная часть числа равна нулю, как в переменной \(r\) в примере, все равно транслятор создаст в памяти вещественную переменную. Точка - как бы сигнал для транслятора, что необходимо создать именно вещественную переменную. 

Очень большие и очень маленькие числа  записываются с помощью "плавающей точки" (в так называемом научном формате).  
В научном формате число представляется в виде мантиссы(значащей части числа) и порядка. При записи мантисса и порядок отделяются друг от друга буквой e (обозначает 10 в какой-то степени). 
Например, можно сохранить в переменной значение заряда электрона ( \(1,60217662 \times 10^{-19}\) Кл), записав в следующем виде
var E1: real
El := 1.60217662e-19 #для положительного порядка знак + можно не записывать
Практически все вещественные числа не могут храниться в памяти компьютера с идеальной точностью, так как под их хранение выделяется ограниченное число бит. Поэтому при вычислениях с вещественными числами ошибки, связанные с неточностью представления накапливаются. Причем чем меньше места выделено, тем больше будет эта ошибка. Для того, чтобы уменьшить ошибку в Pascal используют тип double, который хранит в памяти вещественное число с большей точностью (занимает в памяти 8 байт, в то время как тип real - 6 байт)

Ввод

Ввести несколько вещественных переменных из входного потока и записать их в переменные можно стандартным способом:
var x, y: real;
read(x, y);
Первое число попадает в переменную \(x\), второе - в \(y\)

Вывод

При выводе вещественных чисел, по умолчанию выбирается научный формат.
Можно настроить вывод так, как нужно по условию задачи. После числа через двоеточие указывается общее количество позиций, которое выделится на число, а затем ещё через двоеточие - количество позиций, выделяемых на дробную часть. Если после первого двоеточия стоит число, меньшее, чем сумма количества знаков в целой части числа, места, отведённого на точку, разделяющую дробную и целую части (на это выделяется 1 знак) и количества знаков, отведённого на дробную часть, то выводится просто число с данным отведённым количеством знаков на дробную часть. Иначе перед числом записываются дополнительные пробелы. Поэтому, если вы не знаете, сколько знаков займёт у вас целая часть, после первого двоееточия можно просто написать 0, и тогда выведется всё число без пробелов перед ним.
Пример:
real x := 1.0/6;
writeln(x:12:9);   // установили вывести 9 знаков после запятой и всего 12 знаков на число, учитывая разделяющую точку                       
На экране выведется
_0.166666672

При работе с вещественными числами можно использовать уже знакомый нам модуль math, который содержит большое число встроенных функций. 
При решении задач часто приходится округлять вещественные числа до ближайших целых значений. Для этого имеются три функции.

ЗАПОМИНАЕМ
функция Trunc(x) - отсекает дробную часть \(x\) и возвращает целое значение.
2 функция Floor(x) -  возвращает наибольшее целое, меньшее или равное \(x\) (округление "вниз")
3 функция Ceil(x) -  возвращает наименьшее целое, большее или равное \(x\) (округление "вверх")

Приведем наиболее полезные функции. Часть из них встроена в Pascal, а остальные содержатся в модуле math.
Функция Описание
Округление
round(x)
встроена
Округляет число до ближайшего целого. Если дробная часть числа равна 0.5, то число округляется до ближайшего целого числа. 
trunc(x)
встроена
Отбрасывает дробную часть
floor(x)
в math
Округляет число вниз («пол»), при этом floor(1.5) == 1floor(-1.5) == -2
ceil(x)
в math
Округляет число вверх («потолок»), при этом ceil(1.5) == 2ceil(-1.5) == -1
abs(x)
встроена
Модуль (абсолютная величина).
Корни, логарифмы
sqrt(x)
встроена
Квадратный корень. Использование: y := sqrt(x)
power(x, y)
в math
Возводит x в степень y. \(x^y\)
log2(x)
в math
Логарифм по основанию 2.
lnxp1(x)
в math
Натуральный логарифм от (х + 1).
Тригонометрия
sin(x)
встроена
Синус угла, задаваемого в радианах
cos(x)
встроена
Косинус угла, задаваемого в радианах
tan(x)
в math
Тангенс угла, задаваемого в радианах
arcsin(x)
в math
Арксинус, возвращает значение в радианах
arccos(x)
в math
Арккосинус, возвращает значение в радианах
arctan(x)
встроена
Арктангенс, возвращает значение в радианах
arctan2(y, x) Полярный угол (в радианах) точки с координатами (x, y).