Справочник по Ada 2005
G.2.1 Модель арифметики с плавающей точкой
В строгом режиме предопределённые операции типа с плавающей точкой должны удовлетворять требованиям точности, указанным здесь, и должны избегать переполнения или сигнализировать о нём в описанных ситуациях. Это поведение представлено в виде модели арифметики с плавающей точкой, основанной на понятии канонической формы (см. A.5.3).
Статическая семантика
Каждому типу с плавающей точкой соответствует бесконечное множество модельных чисел. Модельные числа типа используются для определения требований точности, которые должны выполняться определёнными предопределёнными операциями типа; через определённые атрибуты модельных чисел они также используются для объяснения значения объявления типа с плавающей точкой, объявленного пользователем. Модельные числа производного типа — это модельные числа родительского типа; модельные числа подтипа — это модельные числа его типа.
Модельные числа типа с плавающей точкой T — это ноль и все значения, представимые в канонической форме (для типа T), в которой мантисса имеет T'Model_Mantissa цифр, а экспонента имеет значение, большее или равное T'Model_Emin. (Эти атрибуты определены в G.2.2.)
Модельный интервал типа с плавающей точкой — это любой интервал, границы которого являются модельными числами типа. Модельный интервал типа T, связанный со значением v, — это наименьший модельный интервал T, который включает v. (Модельный интервал, связанный с модельным числом типа, состоит только из этого числа.)
Требования к реализации
Требования к точности для вычисления определённых предопределённых операций типов с плавающей точкой следующие.
Интервал операнда — это модельный интервал типа, указанного для операнда операции, связанный со значением операнда.
Для любой предопределённой арифметической операции, которая возвращает результат типа с плавающей точкой T, требуемые границы результата задаются модельным интервалом T (называемым интервалом результата), определяемым в терминах значений операндов следующим образом:
- Интервал результата — это наименьший модельный интервал T, который включает минимум и максимум всех значений, полученных применением (точной) математической операции к значениям, произвольно выбранным из соответствующих интервалов операндов.
Интервал результата возведения в степень получается путём применения вышеуказанного правила к последовательности умножений, определяемой показателем степени, предполагая произвольное объединение множителей, и к окончательному делению в случае отрицательного показателя степени.
Интервал результата преобразования числового значения в тип с плавающей точкой T — это модельный интервал T, связанный со значением операнда, за исключением случаев, когда исходное выражение относится к типу с фиксированной точкой с small, которое не является степенью T'Machine_Radix или является произведением или делением с фиксированной точкой, любой из операндов которого имеет small, который не является степенью T'Machine_Radix; в этих случаях интервал результата определяется реализацией.
Для любой из вышеперечисленных операций реализация должна возвращать значение, принадлежащее интервалу результата, когда обе границы интервала результата находятся в безопасном диапазоне типа результата T, как определяется значениями T'Safe_First и T'Safe_Last; в противном случае
- если T'Machine_Overflows равно True, реализация должна либо вернуть значение, принадлежащее интервалу результата, либо вызвать Constraint_Error;
- если T'Machine_Overflows равно False, результат определяется реализацией.
Для любого предопределённого отношения между операндами типа с плавающей точкой T реализация может вернуть любое значение (то есть либо True, либо False), полученное путём применения (точного) математического сравнения к значениям, произвольно выбранным из соответствующих интервалов операндов.
Результат проверки на принадлежность определяется в терминах сравнений значения операнда с нижней и верхней границами заданного диапазона или метки типа (применяются обычные правила для этих сравнений).
Разрешения для реализации
Если базовое оборудование с плавающей точкой реализует деление как умножение на обратную величину, интервал результата для деления (и возведения в степень с отрицательным показателем) определяется реализацией.