Руководство по Ada (Ada 2022)
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.1).
Реализация может предоставить нестандартные типы вещественных чисел, потомки root_real, которые объявляются за пределами спецификации пакета Standard, которые могут иметь характеристики, отличные от типа, определенного с помощью real_type_definition. Например, нестандартный тип вещественного числа может иметь асимметричный или беззнаковый базовый диапазон, или его предопределенные операции могут переполняться или «насыщаться» вместо переполнения (модулярная или насыщающая арифметика), или он может иметь другую модель точности, отличную от стандартной (см. G.2.1). Любой тип, являющийся потомком нестандартного типа вещественного числа, также является нестандартным. Реализация может накладывать произвольные ограничения на использование таких типов; определяется реализацией, определены ли операторы, предопределенные для «любого типа вещественного числа», для конкретного нестандартного типа вещественного числа. В любом случае такие типы не допускаются в качестве explicit_generic_actual_parameter для формальных скалярных типов — см. 12.5.2.
ПРИМЕЧАНИЕ Как указано, вещественные литералы принадлежат безымянному предопределенному типу вещественного числа universal_real. Другие типы вещественных чисел не имеют литералов. Однако правила разрешения перегрузки (см. 8.6) допускают выражения типа universal_real всякий раз, когда ожидается тип вещественного числа.