Справочник по Ada 95
G.2.2 Атрибуты чисел с плавающей точкой, ориентированные на модель
В реализациях, поддерживающих Приложение «Числа», атрибуты чисел с плавающей точкой, ориентированные на модель, должны возвращать значения, определённые здесь, как в строгом, так и в ослабленном режимах. Эти определения добавляют условия к тем, что указаны в A.5.3.
Статическая семантика
Для каждого подтипа S типа с плавающей точкой T:
- S'Model_Mantissa
- Возвращает количество цифр в мантиссе канонической формы чисел модели типа T (см. A.5.3). Значение этого атрибута должно быть больше или равно Ceiling(d · log(10) / log(T'Machine_Radix)) + 1, где d — требуемая десятичная точность типа T. Кроме того, оно должно быть меньше или равно значению T'Machine_Mantissa. Этот атрибут возвращает значение типа universal_integer.
- S'Model_Emin
- Возвращает минимальный показатель степени канонической формы чисел модели типа T (см. A.5.3). Значение этого атрибута должно быть больше или равно значению T'Machine_Emin. Этот атрибут возвращает значение типа universal_integer.
- S'Safe_First
- Возвращает нижнюю границу безопасного диапазона типа T. Значение этого атрибута должно быть числом модели типа T и больше или равно нижней границе базового диапазона типа T. Кроме того, если T объявлен с помощью floating_point_definition или получен из такого типа, и floating_point_definition включает real_range_specification со значением нижней границы lb, то значение этого атрибута должно быть меньше или равно lb; в противном случае оно должно быть меньше или равно -10.0 4 · d, где d — требуемая десятичная точность типа T. Этот атрибут возвращает значение типа universal_real.
- S'Safe_Last
- Возвращает верхнюю границу безопасного диапазона типа T. Значение этого атрибута должно быть числом модели типа T и меньше или равно верхней границе базового диапазона типа T. Кроме того, если T объявлен с помощью floating_point_definition или получен из такого типа, и floating_point_definition включает real_range_specification со значением верхней границы ub, то значение этого атрибута должно быть больше или равно ub; в противном случае оно должно быть больше или равно 10.0 4 · d, где d — требуемая десятичная точность типа T. Этот атрибут возвращает значение типа universal_real.
- S'Model
- Обозначает функцию (от параметра X), описание которой приведено в A.5.3. Если X — число модели типа T, функция возвращает X; в противном случае она возвращает значение, полученное путём округления или усечения X до одного из смежных чисел модели типа T. Если полученное число модели находится за пределами безопасного диапазона S, генерируется Constraint_Error. Результат с нулём имеет знак X, если S'Signed_Zeros истинно.
В соответствии с вышеуказанными ограничениями значения S'Model_Mantissa и S'Safe_Last должны быть максимизированы, а значения S'Model_Emin и S'Safe_First — минимизированы реализацией следующим образом:
- Во-первых, S'Model_Mantissa устанавливается в наибольшее значение, при котором значения S'Model_Emin, S'Safe_First и S'Safe_Last могут быть выбраны таким образом, чтобы реализация удовлетворяла требованиям строгого режима G.2.1 в отношении чисел модели и безопасного диапазона, заданного этими атрибутами.
- Затем S'Model_Emin устанавливается в наименьшее значение, при котором значения S'Safe_First и S'Safe_Last могут быть выбраны таким образом, чтобы реализация удовлетворяла требованиям строгого режима G.2.1 в отношении чисел модели и безопасного диапазона, заданного этими атрибутами и ранее определённым значением S'Model_Mantissa.
- Наконец, S'Safe_First и S'Safe_last устанавливаются (в любом порядке) в наименьшее и наибольшее значения соответственно, при которых реализация удовлетворяет требованиям строгого режима G.2.1 в отношении чисел модели и безопасного диапазона, заданного этими атрибутами и ранее определёнными значениями S'Model_Mantissa и S'Model_Emin.