Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

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

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

Синтаксис

floating_point_definition ::=
digits static_expression [real_range_specification]
real_range_specification ::=
range static_simple_expression .. static_simple_expression

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

Требуемая десятичная точность, которая является минимальным числом значащих десятичных цифр, требуемых для типа с плавающей точкой, задаётся значением expression, указанным после ключевого слова digits. Ожидается, что эта expression будет иметь любой целочисленный тип.
Каждое simple_expression в real_range_specification должно быть любого вещественного типа; типы могут отличаться.

Правила легальности

Требуемая десятичная точность должна быть указана статической expression, значение которой положительно и не больше System.Max_Base_Digits. Каждое simple_expression в real_range_specification также должно быть статическим. Если real_range_specification опущена, требуемая десятичная точность должна быть не больше System.Max_Digits.
Определение floating_point_definition является незаконным, если реализация не поддерживает тип с плавающей точкой, удовлетворяющий требуемой десятичной точности и диапазону.

Статические семантики

Множество значений для типа с плавающей точкой — это бесконечное множество рациональных чисел. Машинные числа типа с плавающей точкой — это значения типа, которые могут быть представлены точно во всех переменных без ограничений типа. Базовый диапазон (см. 3.5) типа с плавающей точкой симметричен относительно нуля, за исключением того, что в некоторых реализациях он может включать некоторые дополнительные отрицательные значения.
Базовая десятичная точность типа с плавающей точкой — это количество значащих десятичных цифр точности, представимых в объектах типа. Безопасный диапазон типа с плавающей точкой — это та часть его базового диапазона, для которой точность, соответствующая базовой десятичной точности, сохраняется всеми предопределёнными операциями.
Определение floating_point_definition определяет тип с плавающей точкой, чья базовая десятичная точность не меньше требуемой десятичной точности. Если задан real_range_specification, безопасный диапазон типа с плавающей точкой (и, следовательно, также его базовый диапазон) включает по крайней мере значения выражений, указанные в real_range_specification. Если real_range_specification не указан, безопасный (и базовый) диапазон типа включает по крайней мере значения диапазона –10.0**(4*D) .. +10.0**(4*D), где D — требуемая десятичная точность. Безопасный диапазон может также включать и другие значения. Атрибуты Safe_First и Safe_Last дают фактические границы безопасного диапазона.
Определение floating_point_definition также определяет первый подтип типа. Если задан real_range_specification, подтип ограничен диапазоном, границы которого заданы преобразованием значений simple_expression в real_range_specification в тип, который определяется. В противном случае подтип не ограничен.
Существует предопределённый, неограниченный подтип с плавающей точкой под названием 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).
ПРИМЕЧАНИЕ Если подтип с плавающей точкой не ограничен, то присваивания переменным подтипа включают только Overflow_Checks, но никогда Range_Checks.

Примеры

Примеры типов и подтипов с плавающей точкой:
type Coefficient is digits 10 range -1.0 .. 1.0;
type Real is digits 8;
type Mass is digits 7 range 0.0 .. 1.0E35;
subtype Probability is Real range 0.0 .. 1.0;
-- подтип с меньшим диапазоном


Spec-Zone.ru

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