Справочное руководство по языку Ада-83

Универсальные выражения


Универсальное выражение —

это выражение, вырабатывающее результат

универсального-целого

или

универсального-вещественного

типа.

Для

универсального-целого

типа предопределены те же операции, что и для любого целого типа. Для

универсального-вещественного

типа предопределены те же операции, что и для любого плавающего типа. Кроме того, эти операции включают операции умножения и деления.



Знак Операция операции

Тип левого операнда

Тип правого операнда

Тип результата

*

Умножение

Универсальный-вещественный

Универсальный- целый

Универсальный- вещественный

Универсальный - целый

Универсальный- вещественный

Универсальный - вещественный

/

Деление

Универсальный-вещественный

Универсальный-целый

Универсальный-вещественный

Точность вычисления универсального выражения типа

универсальный-вещественный

обязана быть не ниже точности любого из предопределенных плавающих типов, поддержанных в реализации, исключая сам

универсальный-вещественный

тип. Более того, если универсальное выражение — статическое, то вычисление также должно быть точным.

При вычислении операций универсального выражения, не являющегося статическим, возбуждение исключения NUMERIC_ERROR реализацией допускается только в том случае, если результат операции — вещественное число с абсолютным значением, превышающим наибольшее хранимое число самого точного предопределенного плавающего типа (исключая

универсальный-вещественный),

или целое значение, большее, чем SYSTEM.MAX_INT, либо меньшее, чем SYSTEM.MIN_INT.

Примечание.

Следствием приведенных выше правил является то, что тип универсального выражения —

универсальный-целый,

если этот тип имеет каждое первичное, содержащееся в выражении (исключая фактические параметры атрибутов — функций и правые операнды операций возведения в степень), в противном случае тип универсального выражения —

универсальный-вещественный.


Примеры:

1+1 -- 2 аbs(-10)*3 -- 30

KILO : constant := 1000; MEGA : constant := KILO*KILO; -- 1 000 000 LONG : constant := FLOАТ'DIGIТS*2;

HALF_PI : constant := Р1/2; -- см. 3.2.2. DEG_TO_RAD : constant := HALF_Р1/90; RAD_TO_DEG : constant := 1.0/DЕG_ТО_RАD; --- эквивалентно 1.0/((3.14159_26536/2)/90)

Ссылки:

атрибут 4.1.4, вещественный тип 3.5.6, вычисление выражения 4.5, мультипликативная операция 4.5, 4.5.5, первичное 4.4, плавающий тип 3.5.9, предопределенная операция типа 3.3.3, SYSTEM.MAX-INT 13.7, SYSTEM.MIN-INT 13.7, тип 3.3, универсальный-вещественный тип 3.5.6, универсальный-целый тип 3.5.4, фактический параметр 6.4.1, функция 6.5, хранимое число 3.5.6, целый тип 3.5.4.

Пред.  Уровень выше  След.

4.9. СТАТИЧЕСКИЕ ВЫРАЖЕНИЯ И СТАТИЧЕСКИЕ ПОДТИПЫ

 
Содержание  Глава 5.

ОПЕРАТОРЫ


Содержание раздела