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


Исключения и оптимизация - часть 2


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

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

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

Примечание.

Правило б) применимо к предопределенным операциям, но неприменимо к формам управления с промежуточной проверкой.

Выражение SPEED < 300-000.0 может быть заменено на TRUE, если значение 300-000.0 находится вне границ базового типа для SPEED, даже если неявное преобразование этого числового литерала может возбудить исключение NUMERIC_ERROR.

Пример:

declare

N : INTEGER; begin

N := О; -- (1) for J in 1 .. 10 loop

N := N + J**A(K); -&#x2014; А и К являются глобальными переменными end loop;

PUT(N); exception

when others => PUT("Some error arose"); PUT(N); end:

Вычисление А(К) может быть выполнено до цикла и, возможно, непосредственно перед оператором присваивания (1), даже если в нем может возбуждаться исключение. Следовательно, внутри обработчика исключения значение N будет либо неопределенным, либо результатом последнего присваивания.




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



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