Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
IEEE 754 RUS.doc
Скачиваний:
4
Добавлен:
14.08.2019
Размер:
344 Кб
Скачать
☆
    1. Исключительные ситуации

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

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

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

7.1 Невыполнимая операция (invalid operation). Исключительная ситуация невыполнимая операция возникает, если в исполняемой операции операнд неправильный. Результат, когда встречается невыполнимая операция без обработки по прерыванию, должен быть простым NaN (6.2) в формате результата с плавающей точкой.

Невыполнимые операции:

  1. Любая операция с сигнализирующим NaN (6.2)

  2. Сложение или вычитание – когда вычитаются значения бесконечностей (+

  3. Умножение – 0 с любыми знаками

  4. Деление – 0 / 0 или  / 

  5. Вычисление остатка – , где x бесконечность или y - нуль

  6. Извлечение квадратного корня, если операнд меньше нуля

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

  8. Сравнение с использованием утверждений < или >, без ?, когда один из операндов несравним (5.7, таблица 4).

7.2. Деление на ноль. Если делитель ноль, а делимое имеет конечное ненулевое значение, то должна будет сигнализироваться исключительная ситуация деления на ноль. При отсутствии обработки по прерыванию результату должно быть присвоено значение с правильным знаком (6.3).

7.3 Положительное переполнение (owerflow). (Переполнение разрядной сетки при положительном порядке. Примечание переводчика.) Исключительная ситуация положительного переполнения должна дать сигнал всякий раз, когда максимальное значение в формате результата превышается значением, которым является округленное значение вычисленного числа с плавающей точкой (раздел 4), когда превышены границы порядка.

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

1) Округление до ближайшего переводит все положительные переполнения в с соответствующим знаком.

2) Округление к нулю переводит все положительные переполнения в максимальное конечное значение со знаком промежуточного числа

3) Округление к – переводит положительные переполнения со знаком плюс результата в положительное максимальное конечное значение, со знаком минус результата в –

4) Округление к + переводит положительные переполнения со знаком минус результата в отрицательное максимальное конечное значение, положительные переполнения со знаком плюс результата в +.

Прерывания по положительному переполнению во всех операциях кроме преобразований должны предоставлять обработчику прерывания результат, полученный делением точного результата существовавшего до округления на 2a. Корректирующее смещение a должно быть 192 в одиночном, 1536 в двойном формате и 32n-2 в расширенном формате, где n – количество бит в поле порядка7.

Прерывания по положительному переполнению при преобразовании из двоичного формата с плавающей точкой должно предоставить обработчику прерывания результат в этом или расширенном формате, возможно с откорректированным смещенным порядком, но округленный до точности адресата (but rounded to the destination’s precision). Прерывания по положительному переполнению при преобразовании из десятичного в двоичное число должно предоставить обработчику прерывания результат в самом широком поддерживаемом формате, возможно с откорректированным смещенным порядком, но округленным до точности адресата. Когда результат находится слишком далеко за границами уточненного смешенного порядка, тогда взамен должно быть выдано простое NaN.

7.4 Отрицательное переполнение (underflow). (Переполнение разрядной сетки при отрицательном порядке. Потеря значимости. Примечание переводчика.) Два коррелированных (взаимосвязанных) события вносят свой вклад в отрицательное переполнение. Первое - создание крошечного результата отличного от нуля между ±2Emin, который, потому что он так мал, может вызвать позже некоторую другую исключительную ситуацию, такую как положительное переполнение при делении. Второе – экстраординарная (чрезвычайная) потеря точности при аппроксимации таких маленьких чисел ненормализованными числами. Конструктор может выбрать, как эти события определить, но он должен определять эти события таким же образом для всех операций.

Крошечность (tininess) может быть обнаружена одним из двух способов:

(1) После округления - когда отличный от нуля результат, вычисленный так, как если бы диапазон порядка был бы неограничен, будет лежать строго между ±2Emin.

(2) Перед округлением - когда отличный от нуля результат, вычисленный так, как если бы диапазон порядка и точность были неограниченны, окажется строго между ±2Emin.

Потеря точности (loss of accuracy) может быть обнаружена как одно из двух:

(3) Де нормализованная потеря - когда полученный результат отличается от того, который был бы вычислен при неограниченном диапазоне порядка.

(4) Неточный результат (inexact result) - когда полученный результат отличается от того, который был бы вычислен при неограниченном диапазоне порядка и точности. (Это - условие, названо неточностью (inexact) в 7.5).

Когда прерывание в исключительной ситуации отрицательного переполнения не осуществлено, или не активировано (случай по умолчанию), отрицательное переполнение должно быть сигнализировано (посредством флага отрицательного переполнения) только когда оба и крошечность (tininess) и потеря точности (loss of accuracy) были обнаружены. Метод для обнаружения крошечности и потери точности не воздействует на полученный результат, который может быть нулём, ненормализованным или ±2Е min.

Когда осуществлено прерывание в исключительной ситуации отрицательного переполнения и оно активировано, то флаг отрицательного переполнения должен сигнализировать, когда ситуация tininess обнаружена независимо от loss of accuracy потери точности. Прерывания в исключительной ситуации отрицательного переполнения на всех операциях кроме преобразования должны поставить обработчику прерывания, результат, полученный умножением абсолютно точного результата на 2a и затем округленного. Поправка смещения (bias adjust) a равна 192 в одиночном, 1536 в двойном и в расширенном формате, где n - число бит в поле порядка.8

Прерывания при отрицательном переполнении при выполнении преобразований должны быть обработаны аналогично обработке положительного переполнения при преобразовании.

7.5 Неточный результат (inexact). Если округленный результат операции не точен или если имеет место положительное переполнение без прерывания, тогда должна быть объявлена исключительная ситуация неточный результат. Округленный или переполненный результат должен быть доставлен по назначению или, если прерывание по исключительной ситуации неточный результат произошло, к обработчику прерывания.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]