В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа.
В предыдущих версиях Delphi 1...3 тип Real занимал 6 байт и имел диапазон значений от2, 9*10 -39 до 1,7*10 38 . В версиях 4 и 5 этот тип эквивалентен типу Double. Если требуется (в целях совместимости) использовать 6-байтньш Real, нужно указать директиву компилятора {SREALCOMPATIBILITY ON}.
Как видно из табл. 3.4, вещественное число в Object Pascal занимает от 4 до 10 смежных байт и имеет следующую структуру в памяти ПК:
S
е
m
где s - знаковый разряд числа;
е - экспоненциальная часть; содержит двоичный порядок;
m - мантисса числа.
Мантисса m имеет длину от 23 (для single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7...8 для single и 19...20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).
Отметим, что арифметический сопроцессор всегда обрабатывает числа в формате Extended, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются, как правило, для экономии памяти.
Особое положение в Object Pascal занимают типы comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в comp дробная часть имеет длину 0 разрядов, т.е. просто отсутствует, в currency длина дробной части -4 десятичных разряда. Фактически оба типа определяют большое целое число со знаком, сохраняющее 19...20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях comp и currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.
Для работы с вещественными данными могут использоваться встроенные математические функции, представленные в табл. 3.5.
Таблица 3.5.Стандартные математические функции Object Pascal
Обращение
Тип параметра
Тип результата
Примечание
abs (x)
вещественный, целый
тип аргумента
вещественный
Модуль аргумента
Pi
-
вещественный
=3.141592653...
ArcTan(x)
вещественный, целый
то же
Арктангенс (значение в радианах)
cos (x)
то же
то же
Косинус, угол в радианах
exp(x)
то же
то же
Экспонента eX
frac(x)
то же
то же
Дробная часть числа
int(x)
то же
то же
Целая часть числа
ln(x)
то же
то же
Логарифм натуральный
Random
-
то же
Псевдослучайное число, равномерно распределенное в диапазоне 0...[1]
Random(x)
целый
целый
Псевдослучайное целое число, равномерно распределенное в диапазоне 0...(х-1)