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

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

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

Синтаксис

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

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

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

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

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

Примеры

Примеры типов с плавающей точкой и подтипов:
type Коэффициент is digits 10 range -1.0 .. 1.0;
type Вещественное is digits 8;
type Масса is digits 7 range 0.0 .. 1.0E35;
subtype Вероятность is Вещественное range 0.0 .. 1.0; -- подтип с меньшим диапазоном


Spec-Zone.ru

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