Spec-Zone.ru › Ada 2005
Справочник Ada 2005

3.5.7 Типы с плавающей точкой

Для типов с плавающей точкой граница погрешности задаётся как относительная точность путём указания требуемого минимального числа значащих десятичных цифр.

Синтаксис

floating_point_definition ::=
digits static_выражение [спецификация_диапазона_вещественных_чисел]
real_range_specification ::=
range static_простое_выражение .. static_простое_выражение

Правила разрешения имён

Требуемая десятичная точность, которая представляет собой минимальное количество значащих десятичных цифр, необходимых для типа с плавающей точкой, задаётся значением выражения, указанного после ключевого слова 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;
подтип Вероятность является Вещественным диапазон 0.0 .. 1.0; -- подтип с меньшим диапазоном


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API