Подобно типу Integer, в Ada существует также предопределенный тип Float. Этот тип может применяться для хранения дробных и "больших" чисел. Тип Float используют, когда не важны минимальное или максимальное значения и минимальная точность чисел: компилятор Ada подберет наиболее "естественный" для данной машины вариант. Тип `Float' не подходит в случае, если диапазон или точность имеет значение. Для этого в Ada есть другие средства.
Над типом Float можно производить все обычные арифматические операции (+, -, *, /, **, и т.д.) а также операции сравнения (=, /=, >, >=, <, <=). Оператор ``**'' обозначает ``возведение в степень''.
Ada требует корректности операций над типами. Поэтому в языке отсутствуют предопределенные операции, такие, чтобы можно было смешать типы Integer и Float, при помощи '+', '-', '*', и '/'. Таким образом, если вы используете Integer и Float вместе, то для преобразования целых величин в величины с плавающей точкой применяйте функцию `Float()' непосредственно в выражении. Такие преобразования делают выражение более ясным, а это иногда важно для понимания программы. Кроме того, когда вы инициализируете переменную типа Float константой, то константа должна содержать точку, иначе компилятор будет "жаловаться".
Например:
Важно понимать общие ограничения для чисел с плавающей точкой на цифровых ЭВМ. Числа с плавающей точкой обычно хранятся как двоичное приближение, использующее ограниченное число разрядов. Вследствие этого, результаты являются только приближением ожидаемых. Даже числа, которые могут быть точно представлены в деятичной системе счисления, становятся неточными после преобразования во внутренний формат чисел с плавающей точкой. Поэтому, избегайте использования "=" для сравнения двух чисел с плавающей точкой. Это не относится к особенностям Ada - в языках Fortran, C, Pascal и т.п. происходит то же самое. Для получения более детальной информации обратитесь к обзору David Goldberg [1991] посвященному арифметике с плавающей точкой.
Какое конечное значение В будет напечатано в приведенной выше процедуре Think?
Перейти к предыдущему разделу | Перейти к следующему разделу | Вернуться к содержанию Урока 6 |
---|
David A. Wheeler (dwheeler@ida.org)
Исходная копия этого документа находится по адресу
"http://www.adahome.com/Tutorials/Lovelace/s6s1.htm".
Исходная копия перевода размещена на сайте http://www.ada-ru.org
Перевод: Юрий Королев
Общая редакция перевода: Г.Ю. Сисюк