Справочное руководство Ada 2005
3.5.6 Типы вещественных чисел
Типы вещественных чисел представляют собой приближения действительных чисел, с относительными границами ошибок для типов с плавающей запятой и с абсолютными границами для типов с фиксированной запятой.
Синтаксис
Статическая семантика
Тип, определённый с помощью real_type_definition, неявно наследуется от root_real, анонимного предопределённого (специфического) типа вещественного числа. Следовательно, все типы вещественных чисел, как с плавающей запятой, так и с фиксированной запятой, находятся в классе производных, укоренённых в root_real.
Вещественные литералы относятся к типу universal_real, универсальному типу (см. 3.4.1) для класса, укоренённого в root_real, что позволяет использовать их с операциями любого типа вещественных чисел. Некоторые операторы умножения имеют тип результата universal_fixed (см. 4.5.5), универсальный тип для класса типов с фиксированной запятой, что позволяет использовать результат умножения или деления там, где ожидается любой конкретный тип с фиксированной запятой.
Динамическая семантика
Выполнение real_type_definition состоит из выполнения floating_point_definition или fixed_point_definition.
Требования к реализации
Реализация должна выполнять вычисление предопределённого оператора root_real с точностью не ниже, чем любая точка с плавающей запятой, определяемая с помощью floating_point_definition.
Разрешения для реализации
При выполнении предопределённой операции с вещественным типом реализация не обязана вызывать Constraint_Error, если результат выходит за пределы базового диапазона типа, при условии, что правильный результат получен, или атрибут Machine_Overflows типа равен False (см. G.2).
Реализация может предоставить нестандартные типы вещественных чисел, являющиеся потомками root_real, которые объявляются вне спецификации пакета Standard, и не должны иметь всех стандартных характеристик типа, определённого с помощью real_type_definition. Например, нестандартный тип вещественного числа может иметь асимметричный или беззнаковый базовый диапазон, или его предопределённые операции могут переполняться или «насыщаться» вместо переполнения (модульная или насыщающая арифметика), или он может не соответствовать модели точности (см. G.2). Любой тип, являющийся потомком нестандартного типа вещественного числа, также является нестандартным. Реализация может устанавливать произвольные ограничения на использование таких типов; определяется реализацией, определены ли операторы, предопределённые для «любого типа вещественных чисел», для конкретного нестандартного типа вещественного числа. В любом случае, такие типы не допускаются как explicit_generic_actual_parameter для формальных скалярных типов — см. 12.5.2.
ПРИМЕЧАНИЯ
34 Как сказано, вещественные литералы относятся к анонимному предопределённому типу вещественного числа universal_real. Другие типы вещественных чисел не имеют литералов. Однако правила разрешения перегрузки (см. 8.6) допускают выражения типа universal_real всякий раз, когда ожидается тип вещественных чисел.