
Действительные типы данных
Действительные типы данных предназначены для хранения чисел, имеющих дробную часть. Ниже приведена таблица, в которой перечисляются эти типы для Delphi 7 и даются диапазоны их изменений.
Тип |
Диапазон значений
|
Число значащих разрядов
|
Требования к памяти в байтах
|
Real48 |
2.9*10-39 1.7*1038 |
11-12 |
6 |
Real |
5.0*10-324 1.7*10308 |
15-16 |
8 |
Single |
1.5*10-45 3.4*1038 |
7-8 |
4 |
Double |
5.0*10-324 1.7*10308 |
15-16 |
8 |
Extended |
3.6*10-4932 1.1*104392 |
19-20 |
10 |
Comp |
-263262 |
19-20 |
8 |
Currency |
-922337203685477.5808 + 922337203685477.5807
|
19-20 |
8 |
Родовым (т.е. обеспечивающим максимальную производительность) является тип Real, который в настоящий момент эквивалентен типуDouble, но в последующих версиях это может быть изменено. В ранних версиях он использовал 6 байтов, т.е. был эквивалентен современномуReal48. Если при перекомпиляции старых кодов есть необходимость вернуться к 6-байтовому представлениюReal, компиляцию надо вести с директивой компилятора{$REALCOMPATIBILITY ON}.
Наименьшую производительность обеспечивает тип Real48, сохраняемый только для обратной совместимости с более ранними версиями языка.
Тип Extended обладает максимальной точностью, но могут возникать проблемы с его переносимостью на другие платформы.
Тип Comp является, строго говоря, большим целым, а не действительным числом, но отличается от целого, например, тем, что к нему нельзя применять функции инкремента и декремента. Этот тип оставлен только для обратной совместимости с более ранними версиями языка, поскольку его возможности перекрываются целым типомInt64.
Тип Currency используется для представления денежных величин. В памяти он хранится как масштабированное в 10000 раз 8-байтовое целое. Благодаря этому при операциях с величинами типаCurrency минимизируются ошибки округления, что очень важно для денежных расчетов. В выражениях, в которых смешаны величины типаCurrency с величинами других действительных типов, значенияCurrency автоматически умножаются или делятся на 10000.
Приведенные в таблице затраты памяти могут изменяться от версии к версии и от системы к системе. Поэтому, если требуется достоверно знать затраты памяти для того или иного типа, следует пользоваться функцией SizeOf.
Булевы типы данных
Переменные булевых типов данных представляют логические значения, например, true (истина) иfalse (ложь). Булевы типы относятся к целым порядковым типам. Ниже приведена таблица, в которой перечисляются эти типы для Delphi 7. Столь большое число одинаковых по смыслу типов связано с желанием обеспечить совместимость Delphi с другими системами. Предпочтительнее всегда использовать типBoolean, кроме обращений к каким-нибудь процедурам, явным образом требующим другой тип.
Тип |
Значения |
Требования к памяти в байтах |
Boolean |
Булева величина в один байт |
1 |
ByteBool |
Булева величина в один байт |
1 |
WordBool |
Булева величина в одно слово |
2 |
LongBool |
Булевская величина в два слова |
4 |
Предопределенные в языке константы true и false обладают в разных булевых типах несколько разными свойствами, которые просуммированы в приведенной ниже таблице.
тип Boolean |
типы ByteBool, WordBool, LongBool |
false < true |
false <> true |
Ord(false) = 0 |
Ord(false) = 0 |
Ord(true) = 1 |
Ord(true) <> 0 |
Succ(false) = true |
Succ(false) = true |
Pred(true) = false |
Pred( false) = true |
В отличие от некоторых других языков. Object Pascal не позволяет трактовать целое значение как булеву величину. Поэтому, например, если X — целая переменная, то оператор
if x then ...
будет воспринят компилятором как синтаксическая ошибка.
Для булевых типов определены операции and(И),ог (ИЛИ),not (HE, отрицание) и хоr(исключающееИЛИ. Использование этих операций расширяет возможности по формированию сложных условий в ряде операторов.