Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

G.2.2 Атрибуты чисел с плавающей точкой, ориентированные на модель

В реализациях, поддерживающих приложение «Числа», атрибуты чисел с плавающей точкой, ориентированные на модель, должны иметь значения, определённые здесь, как в строгом, так и в ослабленном режимах. Эти определения добавляют условия к тем, что приведены в A.5.3.

Статическая семантика

Для каждого подтипа S типа чисел с плавающей точкой T:
S'Model_Mantissa

Возвращает количество цифр в мантиссе канонической формы модельных чисел типа T (см. A.5.3). Значение этого атрибута должно быть больше или равно
Ceiling(d · log(10) / log(T'Machine_Radix)) + g
где d — требуемая десятичная точность типа T, а g — 0, если T'Machine_Radix является положительной степенью 10, и 1 в противном случае. Кроме того, T'Model_Mantissa должно быть меньше или равно значению 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. Ошибка Constraint_Error возникает, если полученное модельное число выходит за пределы безопасного диапазона S. Результат нуля имеет знак X, когда S'Signed_Zeros равно True.
В соответствии с приведенными выше ограничениями, значения 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.


Spec-Zone.ru

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