Spec-Zone.ru › Ada 2005
Справочник Ada 2005

A.5.3 Атрибуты типов с плавающей точкой

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

Следующие атрибуты, ориентированные на представление, определены для каждого подтипа S типа с плавающей точкой T.
S'Machine_Radix

Возвращает основание аппаратного представления типа T. Значение этого атрибута имеет тип universal_integer.
Значения других атрибутов, ориентированных на представление типа с плавающей точкой, и атрибутов «примитивных функций» подтипа с плавающей точкой, описанных позже, определяются относительно определенного представления ненулевых значений, называемого канонической формой. Каноническая форма (для типа T) имеет вид
± мантисса · 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.
Значения, описываемые формулой в определении S'Denorm, называются денормализованными числами. Ненулевое машинное число, которое не является денормализованным, является нормализованным числом. Нормализованное число x данного типа T называется представленным в канонической форме, когда оно выражено в канонической форме (для типа T) с мантиссой, имеющей T'Machine_Mantissa цифр; полученная форма является каноническим представлением x.
S'Machine_Rounds

Возвращает значение True, если округление выполняется для неточных результатов каждой предопределенной операции, возвращающей результат типа T; в противном случае возвращает значение False. Значение этого атрибута имеет тип Boolean.
S'Machine_Overflows

Возвращает значение True, если переполнение и деление на ноль обнаруживаются и сообщаются путем поднятия Constraint_Error для каждой предопределенной операции, возвращающей результат типа T; в противном случае возвращает значение False. Значение этого атрибута имеет тип Boolean.
S'Signed_Zeros

Возвращает значение True, если аппаратное представление типа T имеет возможность представлять как положительные, так и отрицательные нули, которые генерируются и используются предопределенными операциями типа T в соответствии со спецификацией IEC 559:1989; в противном случае возвращает значение False. Значение этого атрибута имеет тип Boolean.
Для каждого значения x типа с плавающей точкой T, нормализованная экспонента x определяется следующим образом:
  • нормализованная экспонента нуля (по соглашению) равна нулю;
  • для ненулевого x, нормализованная экспонента x является единственным целым числом k таким, что T'Machine_Radixk–1 ≤ |x| < T'Machine_Radixk.
Следующие атрибуты примитивных функций определены для любого подтипа S типа с плавающей точкой T.
S'Exponent
S'Exponent обозначает функцию со следующей спецификацией:
function S'Exponent (X : T)
return universal_integer
Функция возвращает нормализованную экспоненту X.
S'Fraction
S'Fraction обозначает функцию со следующей спецификацией:
function S'Fraction (X : T)
return T
Функция возвращает значение X · T'Machine_Radix–k, где k — нормализованная экспонента X. Нулевой результат, который может произойти только когда X равно нулю, имеет знак X.
S'Compose
S'Compose обозначает функцию со следующей спецификацией:
function S'Compose (Fraction : T;
Exponent : universal_integer)
return T
Пусть v — значение Fraction · T'Machine_RadixExponent–k, где k — нормализованная экспонента Fraction. Если v является машинным числом типа T или |v| ≥ T'Model_Small, функция возвращает v; в противном случае она возвращает одно из машинных чисел типа T, смежных с v. Constraint_Error может быть необязательно поднят, если v находится за пределами базового диапазона S. Нулевой результат имеет знак Fraction, когда S'Signed_Zeros равен True.
S'Scaling
S'Scaling обозначает функцию со следующей спецификацией:
function S'Scaling (X : T;
Adjustment : universal_integer)
return T
Пусть v — значение X · T'Machine_RadixAdjustment. Если v является машинным числом типа T или |v| ≥ T'Model_Small, функция возвращает v; в противном случае она возвращает одно из машинных чисел типа T, смежных с v. Constraint_Error может быть необязательно поднят, если v находится за пределами базового диапазона S. Нулевой результат имеет знак X, когда S'Signed_Zeros равен True.
S'Floor
S'Floor обозначает функцию со следующей спецификацией:
function S'Floor (X : T)
return T
Функция возвращает значение Floor(X), т.е. наибольшее (наиболее положительное) целое значение, меньшее или равное X. Когда X равно нулю, результат имеет знак X; в противном случае нулевой результат имеет положительный знак.
S'Ceiling
S'Ceiling обозначает функцию со следующей спецификацией:
function S'Ceiling (X : T)
return T
Функция возвращает значение Ceiling(X), то есть наименьшее (наименее положительное) целое значение, большее или равное X. Если X равно нулю, результат имеет знак X; в противном случае результат имеет отрицательный знак, если S'Signed_Zeros равно True.
S'Rounding
S'Rounding обозначает функцию со следующим описанием:
function S'Rounding (X : T)
return T
Функция возвращает целое значение, ближайшее к X, округляя от нуля, если X лежит ровно посередине между двумя целыми числами. Результат с нулевым значением имеет знак X, если S'Signed_Zeros равно True.
S'Unbiased_Rounding

S'Unbiased_Rounding обозначает функцию со следующим описанием:
function S'Unbiased_Rounding (X : T)
return T
Функция возвращает целое значение, ближайшее к X, округляя к ближайшему четному числу, если X лежит ровно посередине между двумя целыми числами. Результат с нулевым значением имеет знак X, если S'Signed_Zeros равно True.
S'Machine_Rounding

S'Machine_Rounding обозначает функцию со следующим описанием:
function S'Machine_Rounding (X : T)
return T
Функция возвращает целое значение, ближайшее к X. Если X лежит ровно посередине между двумя целыми числами, возвращается одно из этих чисел, но какое именно — не определено. Результат с нулевым значением имеет знак X, если S'Signed_Zeros равно True. Эта функция обеспечивает доступ к поведению округления, которое наиболее эффективно на целевом процессоре.
S'Truncation
S'Truncation обозначает функцию со следующим описанием:
function S'Truncation (X : T)
return T
Функция возвращает значение Ceiling(X) при X отрицательном и Floor(X) в противном случае. Результат с нулевым значением имеет знак X, если S'Signed_Zeros равно True.
S'Remainder
S'Remainder обозначает функцию со следующим описанием:
function S'Remainder (X, Y : 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
Если 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
Если значение 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
Пусть 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
Если 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
Если Приложение по численным методам не поддерживается, смысл этого атрибута реализационно-зависим; см. 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.


Spec-Zone.ru

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