Справочное руководство по Ada 2012
A.5.3 Атрибуты типов с плавающей точкой
Статическая семантика
Следующие атрибуты, ориентированные на представление, определены для каждого подтипа S типа с плавающей точкой T.
S'Machine_Radix
Возвращает основание аппаратного представления типа T. Значение этого атрибута имеет тип universal_integer.
Значения других атрибутов, ориентированных на представление типа с плавающей точкой, и атрибутов «примитивной функции» подтипа с плавающей точкой, описанных позднее, определяются с использованием определённого представления ненулевых значений, называемого канонической формой. Каноническая форма (для типа T) имеет вид
± мантисса · T'Machine_Radixэкспонента
где
± мантисса · T'Machine_Radixэкспонента
где
- мантисса представляет собой дробь в системе счисления с основанием T'Machine_Radix, первая цифра которой ненулевая, и
- экспонента является целым числом.
S'Machine_Mantissa
Возвращает наибольшее значение p такое, что каждое значение, выразимое в канонической форме (для типа T), имеющее p-значную мантиссу и экспоненту между T'Machine_Emin и T'Machine_Emax, является машинным числом (см. 3.5.7) типа T. Этот атрибут возвращает значение типа universal_integer.
S'Machine_Emin
Возвращает наименьшее (наименее положительное) значение экспоненты такое, что каждое значение, выразимое в канонической форме (для типа T), имеющее мантиссу из T'Machine_Mantissa цифр, является машинным числом (см. 3.5.7) типа T. Этот атрибут возвращает значение типа universal_integer.
S'Machine_Emax
Возвращает наибольшее (наиболее положительное) значение экспоненты такое, что каждое значение, выразимое в канонической форме (для типа T), имеющее мантиссу из T'Machine_Mantissa цифр, является машинным числом (см. 3.5.7) типа T. Этот атрибут возвращает значение типа universal_integer.
S'Denorm
Возвращает значение True, если каждое значение, выразимое в форме
± мантисса · T'Machine_RadixT'Machine_Emin
где мантисса представляет собой ненулевую T'Machine_Mantissa-значную дробь в системе счисления с основанием T'Machine_Radix, первая цифра которой равна нулю, является машинным числом (см. 3.5.7) типа T; в противном случае возвращает значение False. Значение этого атрибута имеет тип Boolean.
± мантисса · T'Machine_RadixT'Machine_Emin
где мантисса представляет собой ненулевую T'Machine_Mantissa-значную дробь в системе счисления с основанием T'Machine_Radix, первая цифра которой равна нулю, является машинным числом (см. 3.5.7) типа T; в противном случае возвращает значение False. Значение этого атрибута имеет тип Boolean.
Значения, описанные формулой в определении S'Denorm, называются денормализованными числами.
function S'Ceiling (X : T)
return T
return T
Функция возвращает значение Ceiling(X), т.е. наименьшее (наиболее отрицательное) целое значение, большее или равное X. Когда X равно нулю, результат имеет знак X; в противном случае нулевой результат имеет отрицательный знак, если S'Signed_Zeros имеет значение True.
S'Rounding
S'Rounding обозначает функцию со следующим описанием:
function S'Rounding (X : T)
return T
return T
Функция возвращает целое значение, наиболее близкое к X, округляя от нуля, если X находится ровно посередине между двумя целыми числами. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True.
S'Unbiased_Rounding
S'Unbiased_Rounding обозначает функцию со следующим описанием:
function S'Unbiased_Rounding (X : T)
return T
return T
Функция возвращает целое значение, наиболее близкое к X, округляя к четному целому числу, если X находится ровно посередине между двумя целыми числами. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True.
S'Machine_Rounding
S'Machine_Rounding обозначает функцию со следующим описанием:
function S'Machine_Rounding (X : T)
return T
return T
Функция возвращает целое значение, наиболее близкое к X. Если X находится ровно посередине между двумя целыми числами, возвращается одно из этих целых чисел, но какое из них возвращается, не определено. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True. Данная функция обеспечивает доступ к поведению округления, наиболее эффективному на целевом процессоре.
S'Truncation
S'Truncation обозначает функцию со следующим описанием:
function S'Truncation (X : T)
return T
return T
Функция возвращает значение Ceiling(X) при X < 0 и Floor(X) в противном случае. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True.
S'Remainder
S'Remainder обозначает функцию со следующим описанием:
function S'Remainder (X, Y : T)
return T
return T
Для ненулевого Y, пусть v — значение X – n · Y, где n — целое число, ближайшее к точному значению X/Y; если |n – X/Y| = 1/2, то n выбирается чётным. Если v — машинный номер типа T, функция возвращает v; в противном случае она возвращает ноль. Ошибка Constraint_Error возникает, если Y равно нулю. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True.
S'Adjacent
S'Adjacent обозначает функцию со следующим описанием:
function S'Adjacent (X, Towards : T)
return T
return T
Если Towards = X, функция возвращает X; в противном случае она возвращает машинный номер типа T, смежный с X в направлении Towards, если такой машинный номер существует. Если результат будет находиться за пределами базового диапазона S, возникает ошибка Constraint_Error. Когда T'Signed_Zeros имеет значение True, нулевой результат имеет знак X. Когда Towards равно нулю, его знак не влияет на результат.
S'Copy_Sign
S'Copy_Sign обозначает функцию со следующим описанием:
function S'Copy_Sign (Value, Sign : T)
return T
return T
Если значение Value ненулевое, функция возвращает результат, модуль которого равен Value, а знак — Sign; в противном случае она возвращает ноль. Ошибка Constraint_Error может быть выбрана, если результат находится за пределами базового диапазона S. Нулевой результат имеет знак Sign, если S'Signed_Zeros имеет значение True.
S'Leading_Part
S'Leading_Part обозначает функцию со следующим описанием:
function S'Leading_Part (X : T;
Radix_Digits : universal_integer)
return T
Radix_Digits : universal_integer)
return T
Пусть v — значение T'Machine_Radixk–Radix_Digits, где k — нормированный показатель степени X. Функция возвращает значение
Floor(X/v) · v, когда X неотрицательно и Radix_Digits положительно;
Ceiling(X/v) · v, когда X отрицательно и Radix_Digits положительно.
Ошибка Constraint_Error возникает, когда Radix_Digits равно нулю или отрицательно. Нулевой результат, который может произойти только когда X равно нулю, имеет знак X.
S'Machine
S'Machine обозначает функцию со следующим описанием:
function S'Machine (X : T)
return T
return T
Если X — машинный номер типа T, функция возвращает X; в противном случае она возвращает значение, полученное путем округления или усечения X до одного из смежных машинных чисел типа T. Ошибка Constraint_Error возникает, если округление или усечение X до точности машинных чисел приводит к значению, выходящему за пределы базового диапазона S. Нулевой результат имеет знак X, если S'Signed_Zeros имеет значение True.
Для любого подтипа S типа с плавающей точкой T определены следующие атрибуты, ориентированные на модель.
S'Model_Mantissa
Если дополнение по Арифметике чисел не поддерживается, этот атрибут возвращает значение, определенное реализацией, которое больше или равно Ceiling(d · log(10) / log(T'Machine_Radix)) + 1, где d — требуемая десятичная точность T, и меньше или равно значению T'Machine_Mantissa. См. G.2.2 для дополнительных требований, которые применяются к реализациям, поддерживающим дополнение по Арифметике чисел. Значение этого атрибута имеет тип universal_integer.
S'Model_Emin
Если дополнение по Арифметике чисел не поддерживается, этот атрибут возвращает значение, определенное реализацией, которое больше или равно значению T'Machine_Emin. См. G.2.2 для дополнительных требований, которые применяются к реализациям, поддерживающим дополнение по Арифметике чисел. Значение этого атрибута имеет тип universal_integer.
S'Model_Epsilon
Возвращает значение T'Machine_Radix1 – T'Model_Mantissa. Значение этого атрибута имеет тип universal_real.
S'Model_Small
Возвращает значение T'Machine_RadixT'Model_Emin – 1. Значение этого атрибута имеет тип universal_real.
S'Model
S'Model обозначает функцию со следующим описанием:
function S'Model (X : T)
return T
return T
Если дополнение по Арифметике чисел не поддерживается, смысл этого атрибута определяется реализацией; см. G.2.2 для определения, применимого к реализациям, поддерживающим дополнение по Арифметике чисел.
S'Safe_First
Возвращает нижнюю границу безопасного диапазона (см. 3.5.7) типа T. Если Приложение по числовым данным не поддерживается, значение этого атрибута определяется реализацией; см. G.2.2 для определения, применяемого к реализациям, поддерживающим Приложение по числовым данным. Значение этого атрибута имеет тип universal_real.
S'Safe_Last
Возвращает верхнюю границу безопасного диапазона (см. 3.5.7) типа T. Если Приложение по числовым данным не поддерживается, значение этого атрибута определяется реализацией; см. G.2.2 для определения, применяемого к реализациям, поддерживающим Приложение по числовым данным. Значение этого атрибута имеет тип universal_real.