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




Примечание 4



Примечание

I : INTEGER := 1; J : INTEGER := 2; К : INTEGER := 3;X : REAL diglts 6 := 1.0; — СМ. 7 Y : REAL diglts 6 := 2.0;F : FRACTION delta 0.0001 := 0.1; — СМ. 9 G : FRACTION delta 0.0001 := 0.1;

Выражение

Значение

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

I . J

2

Тот же, что тип I и J, т. е. INTEGER

K/J

1

Тот же, что тип К и J, т.е. INTEGER

К mod J

1

Тот же, что тип К и J, т. е. INTEGER

X/Y

0.5

Тот же, что тип Х и Y, т. е. REAL

F/2

0.05

Тот же, что тип F, т.е. FRACTION

3 *. F

0.3

Тот же, что тип F, т. е. FRACTION

F * G

0.01

Универсальный-фиксированный требуется

преобразование

FRACTION (F * G)0.01

FRACTION в результате преобразования

 

REAL(J) * Y

4.0

REAL, как и тип обоих операндов после

преобразования

Примечание. Для положительных А и В частное задается выражением А/В, а остаток от деления А на В задается А rem В. Операция rem удовлетворяет следующим соотношениям:

А rem (-В) = А rem В (-А) rem В = -(А rem В)

Для некоторого целого К справедливо следующее тождество:

А mod В = (А + К*В) mod В

Соотношения между делением нацело, остатком и вычетом по модулю иллюстрируются следующей таблицей:

А

В

А/В

А rem В

A mod B

А

В

А/В

А rem В

A mod B

10 5 2 0 0 -10 5 -2 0 0
11 5 2 1 1 -11 5 -2 -1 4
12 5 2 2 2 -12 5 -2 -2 3
13 5 2 3 3 -13 5 -2 -3 2
14 5 2 4 4 -14 5 -2 -4 1
10 -5 -2 0 0 -10 -5 2 0 0
11 -5 -2 1 -4 -11 -5 2 -1 -1
12 -5 -2 2 -3 -12 -5 2 -2 -2
13 -5 -2 3 -2 -13 -5 2 -3 -3
14 -5 -2 4 -1 -14 -5 2 -4 -4

Ссылки: базовый тип 3.3, возбуждение исключений 11, дельта фиксированного типа 9, исключение NUMERIC_ERROR 11.1, описание 3.1, описание переименования 8.5, плавающий тип 7, предопределенная операция 4.5, предопределенный пакет STANDARD 8.6, преобразование типа 4.6, фактический параметр 1, фиксированный тип 9, формальная подпрограмма настройки 12.1, целый тип 4, числовой тип

6. ОПЕРАЦИИ ВЫСШЕГО ПРИОРИТЕТА

Унарная операция высшего приоритета abs предопределена для любого числового типа. Унарная операция высшего приоритета not предопределена для любого логического типа и одномерного индексируемого типа с компонентами логического типа.

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

Операция

Тип операнда

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

abs

Абсолютное значение

Любой числовой тип

Тот же числовой тип

not

Логическое отрицание

Любой логический тип

Тот же логический тип

Массив с логическими компонентами

Тот же индексируемый тип

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

Операция возведения в степень »• предопределена для каждого целого и для каждого плавающего типов. В обоих случаях правый операнд, называемый показателем степени, имеет предопределенный тип INTEGER.

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

Операция

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

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

Тип

результата

**

Возведение в степень

Любой целый тип

INTEGER

Тип

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

Любой плавающий тип

INTEGER

Тип

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

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

Ссылки: возбуждение исключений 11, граница массива 1, индекс 3.6, индексируемый тип 3.6, исключение CONSTRAINT_ERROR 11.1, компонента массива 3.6, логический тип 3, операция умножение 5, плавающий тип 9, предопределенная операция 4.5, размерность 3.6, целый тип 4.

7. ТОЧНОСТЬ ОПЕРАЦИЙ С ВЕЩЕСТВЕННЫМИ ОПЕРАНДАМИ

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

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

Для любой базовой или предопределенной операции, вырабатывающей результат вещественного подтипа, требуемые границы результата задаются модельным интервалом, который определяется следующим образом:

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

• Модельный интервал операнда, который сам является результатом операции, отличной от неявного преобразования, является модельным интервалом результата этой операции.

• Модельный интервал операнда, значение которого получено неявным преобразованием универсального выражения, является модельным интервалом, соответствующим этому значению из подтипа операнда.

Модельный интервал результата не определен, если абсолютное значение хотя бы одного из упомянутых выше математических результатов превышает наибольшее хранимое число типа результата. Всякий раз, когда модельный интервал результата не определен и реализация не может обеспечить, чтобы фактический результат лежал в диапазоне хранимых чисел, крайне желательно возбуждение исключения NUMERIC_ERROR. Правила языка, однако, этого не требуют, так как для некоторых объектных машин нет простых методов обнаружения переполнения. Значение атрибута MACHINE_OVERFLOWS указывает, возбуждает ли объектная машина исключение NUMERIC_ERROR в ситуациях переполнения (см. 3).

Хранимые числа вещественного типа определены (см. 6) как надмножество модельных чисел, границы ошибок которых подчиняются тем же правилам, что и для модельных чисел. Любое задаваемое в этом разделе в терминах модельных интервалов определение может поэтому быть распространено на хранимые интервалы хранимых чисел. Следствием такого распространения является то, что для реализации не допускается возбуждение исключения NUMERIC_ERROR, если интервал результата является хранимым интервалом.

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

Для результата операции отношения между двумя вещественными операндами рассмотрим модельный интервал (подтипа операнда), определенный для каждого такого операнда; результат может быть любым значением, полученным при применении математической операции сравнения к значениям, произвольно выбранным в соответствующих модельных интервалах операндов. Если один или оба модельных интервала операндов не определены (и если при вычислении операндов не было возбуждено исключение), то в качестве результата сравнения допустимо любое возможное значение (т. е. либо TRUE, либо FALSE).

Результат проверки принадлежности определен в терминах сравнения значения операнда с нижней и верхней границами заданного диапазона или обозначения типа (к таким сравнени-ям применяются обычные правила).

Примечание. Для плавающего типа числа 15.0, 3.0 и 5.0 всегда являются модельными числами. Следовательно, X/Y, где Х равно 15.0, а Y — 3.0, согласно приведенным выше правилам, вырабатывает в результате точно В общем случае деление не вырабатывает в результате модельные числа, и, следовательно, нельзя рассчитывать, что выполнено равенство (1.0/Х)'Х =

Ссылки: атрибут 4, атрибут MACHINE_OVERFLOWS 1, базовая операция типа 3, вещественный тип 6, возбуждение исключений 11, граница диапазона 3.5, граница ошибки 6, диапазон 3.5, исключение NUMERIC_ERROR 11.1, логическое значение FALSE 3, логи-' ческое значение TRUE 3, модельное число 6, обозначение типа 2, операция возведения в степень 6, операция отношение 4.5, 2, операция умножение 5, отношение 4.4, плавающий тип 9, подтип 3.3, предопределенная операция типа 3, преобразование типа 4.6, проверка вхождения 2, универсальное выражение 4.10, хранимое число 6.


[5] Если они есть. - Прим. ред.









Начало  Назад  Вперед



Книжный магазин