Spec-Zone.ru › Ada 95
Справочное руководство по Ada 95

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

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

Синтаксис

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

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

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

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

Требуемая десятичная точность должна быть задана статическим выражением с положительным значением, не превышающим 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).
ПРИМЕЧАНИЯ
33 Если подтип с плавающей точкой не ограничен, тогда присваивания переменным подтипа вовлекут только 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