Справочник Ada 2005
3.5.7 Типы с плавающей точкой
Для типов с плавающей точкой граница погрешности задаётся как относительная точность путём указания требуемого минимального числа значащих десятичных цифр.
Синтаксис
Правила разрешения имён
Требуемая десятичная точность, которая представляет собой минимальное количество значащих десятичных цифр, необходимых для типа с плавающей точкой, задаётся значением выражения, указанного после ключевого слова digits. Ожидается, что это выражение будет любого целого типа.
Каждое простое_выражение в спецификации_диапазона_вещественных_чисел ожидается любого вещественного типа; типы могут отличаться.
Правила допустимости
Требуемая десятичная точность должна быть задана статическим выражением с положительным значением, не превышающим System.Max_Base_Digits. Каждое простое_выражение в спецификации_диапазона_вещественных_чисел также должно быть статическим. Если спецификация_диапазона_вещественных_чисел опущена, требуемая десятичная точность не должна превышать System.Max_Digits.
Определение floating_point_definition является недопустимым, если реализация не поддерживает тип с плавающей точкой, удовлетворяющий требуемой десятичной точности и диапазону.
Статическая семантика
Множество значений для типа с плавающей точкой — это (бесконечное) множество рациональных чисел. Машинные числа типа с плавающей точкой — это значения типа, которые можно точно представить во всех неявных переменных типа. Основной диапазон (см. 3.5) типа с плавающей точкой симметричен относительно нуля, за исключением некоторых дополнительных отрицательных значений в некоторых реализациях.
Основная десятичная точность типа с плавающей точкой — это количество десятичных цифр точности, представимых в объектах типа. Безопасный диапазон типа с плавающей точкой — это часть его основного диапазона, для которой точность, соответствующая основной десятичной точности, сохраняется всеми предопределёнными операциями.
Определение floating_point_definition определяет тип с плавающей точкой, основная десятичная точность которого не меньше требуемой десятичной точности. Если задана спецификация_диапазона_вещественных_чисел, безопасный диапазон типа с плавающей точкой (и, следовательно, также его основной диапазон) включает по меньшей мере значения простых выражений, заданных в спецификации_диапазона_вещественных_чисел. Если спецификация_диапазона_вещественных_чисел не задана, безопасный (и основной) диапазон типа включает по меньшей мере значения диапазона от -10.0**(4*D) до +10.0**(4*D), где D — требуемая десятичная точность. Безопасный диапазон может включать и другие значения. Атрибуты Safe_First и Safe_Last задают фактические границы безопасного диапазона.
Определение floating_point_definition также определяет первый подтип типа. Если задана спецификация_диапазона_вещественных_чисел, то подтип ограничен диапазоном, границы которого получены путём преобразования значений простых_выражений из спецификации_диапазона_вещественных_чисел в определяемый тип. В противном случае подтип является неограниченным.
Существует предопределённый неограниченный подтип с плавающей точкой с именем Float, объявленный в видимой части пакета Standard.
Динамическая семантика
Выполнение floating_point_definition создаёт тип с плавающей точкой и его первый подтип.
Требования к реализации
В реализации, поддерживающей типы с плавающей точкой с 6 или более цифрами точности, требуемая десятичная точность для Float должна быть не менее 6.
Если для реализации предопределён Long_Float, то его требуемая десятичная точность должна быть не менее 11.
Разрешения для реализации
Реализация имеет право предоставлять дополнительные предопределённые типы с плавающей точкой, объявленные в видимой части Standard, чьи (неограниченные) первые подтипы имеют имена вида Short_Float, Long_Float, Short_Short_Float, Long_Long_Float и т. д. Разные предопределённые типы с плавающей точкой могут иметь одинаковую основную десятичную точность. Однако точность Float не должна быть больше, чем у Long_Float. Аналогичным образом, точность Short_Float (если она предоставлена) не должна быть больше, чем у Float. Соответствующие рекомендации относятся ко всем другим предопределённым типам с плавающей точкой. Может не быть имени типа с плавающей точкой, соответствующего каждому отличному значению основной десятичной точности, поддерживаемой реализацией.
Рекомендации по реализации
Реализация должна поддерживать Long_Float в дополнение к Float, если целевая машина поддерживает 11 или более цифр точности. Другие именованные подтипы с плавающей точкой для пакета Standard не рекомендуются. Вместо этого соответствующие именованные подтипы с плавающей точкой должны предоставляться в библиотечном пакете Interfaces (см. B.2).
ПРИМЕЧАНИЯ
35 Если подтип с плавающей точкой является неограниченным, то присваивания переменным подтипа включают только Overflow_Checks, но никогда Range_Checks.
Примеры
Примеры типов и подтипов с плавающей точкой:
тип Коэффициент является digits 10 диапазон -1.0 .. 1.0;
тип Вещественное является digits 8;
тип Масса является digits 7 диапазон 0.0 .. 1.0E35;
тип Масса является digits 7 диапазон 0.0 .. 1.0E35;
подтип Вероятность является Вещественным диапазон 0.0 .. 1.0; -- подтип с меньшим диапазоном