В отличие от порядковых типов, значения которых всегда сопоставляются с рядом целых чисел и, следовательно, представляются в ПК абсолютно точно, значения вещественных типов определяют произвольное число лишь с некоторой конечной точностью, зависящей от внутреннего формата вещественного числа. Типы данных представлены в табл. 4.3.
Вещественное число в Турбо Паскале занимает от 4 до 10 смежных байт и имеет следующую структуру в памяти ПК:
s
e
m
Таблица 4.3
Вещественные типы данных
Длина, байт
Название
Количество
значащих цифр
Диапазон десятичного
порядка
Real
11. . .12
-39. ..+38
Double
15. ..16
-324. . .+308
extended
19. . .20
-4951. . .+4932
comp
19. . .20
-2*1063+1. . .+2*63-1
Здесь s – знаковый разряд числа; е – экспоненциальная часть; содержит двоичный порядок; m – мантисса числа.
Мантисса имеет длину от 23 (для SINGLE) до 63 (для EXTENDED) двоичных разрядов, что и обеспечивает точность 7-8 для SINGLE и 19-20 для EXTENDED десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).
Доступ к типам SINGLE, DOUBLE и EXTENDED возможен только при особых режимах компиляции. Дело в том, что эти типы рассчитаны на аппаратную поддержку арифметики с плавающей точкой, и для их эффективного использования в состав ПК должен входить арифметический сопроцессор. Компилятор Турбо Паскаля позволяет создавать программы, работающие на любых ПК (с сопроцессором или без него) и использующие любые вещественные типы. В процессе запуска Турбо Паскаль проверяет состав аппаратных средств и выявляет наличие или отсутствие сопроцессора.
В некоторых случаях бывает необходимо отключить автоконтроль. Для этого перед запуском Турбо Паскаля следует дать такую команду ДОС:
set 87=N
команда
set 87=Y
напротив, включает автоконтроль – эта команда активна по умолчанию.
Арифметический сопроцессор всегда обрабатывает числа в формате EXTENDED, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются в основном для экономии памяти.
Следует учесть, что тип REAL оптимизирован для работы без сопроцессора. Если ПК оснащен сопроцессором, использование типа REAL приведет к дополнительным затратам времени на преобразование REAL к EXTENDED. Поэтому использование REAL на ПК с сопроцессором сводит на нет все преимущества сопроцессора.
При разработке программ, критичных ко времени счета, следует заменять его типами SINGLE или DOUBLE: по сравнению с типом REAL скорость вычислений на машинах с сопроцессором в этом случае увеличивается в 2...3 раза. Если в ПК нет арифметического сопроцессора, скорость обработки данных всех вещественных типов приблизительно одинакова.
Тип СОМР трактуется как вещественное число без экспоненциальной и дробной частей. Фактически, СОМР – это «большое» целое число со знаком, сохраняющее 19...20 значащих десятичных цифр (во внутреннем представлении СОМР занимает 8 смежных байт). В то же время в выражениях СОМР полностью совместим с любыми другими вещественными типами: над ним определены все вещественные операции, он может использоваться как аргумент математических функций и т.д. Наиболее подходящей областью применения типа СОМР являются бухгалтерские расчеты: денежные суммы выражаются в копейках или центах, и действия над ними сводятся к операциям с достаточно длинными целыми числами.
Для работы с вещественными данными могут использоваться встроенные математические функции, представленные в табл. 4.4. В этой таблице REAL означает любой вещественный тип, INTEGER – любой целый тип.
Над вещественными операндами можно выполнять следующие арифметические операции, дающие вещественный результат:
§ сложение + ;
§ вычитание - ;
§ умножение *;
§ деление /.
Таблица 4.4
Стандартные математические функции Турбо Паскаля
Обращение
Тип
параметра
Тип
результата
Примечание
abs (x)
Real, Integer
Тип
аргумента
Модуль аргумента
АrсТаn (х)
Real
Real
Арктангенс ( значение в радианах)
cos (х)
To же
То же
Косинус, угол в радианах
ехр (х)
"
"
Экспонента
frас (х)
"
"
Дробная часть числа
int(x)
"
"
Целая часть числа
ln(x)
"
"
Логарифм натуральный
Pi
-
"
л = 3.141592653...
Random
-
"
Псевдослучайное число, равномерно распределенное в диапазоне 0...[1]
Pandom(x)
Integer
Integer
Псевдослучайное целое число, равномерно распределенное в диапазоне 0...(х-1)
Randomize
-
-
Инициация генератора
псевдослучайных чисел
sin(x)
Real
Real
Синус, угол в радианах
sqr (x)
To же
То же
Квадрат аргумента
sqrt (x)
"
"
Корень квадратный
К величинам вещественного типа применимы все операции отношения, дающие булевский результат (один из операндов, участвующих в этих операциях, может быть целым):