Особые случаи вещественной арифметики

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

 

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

Сопроцессор генерирует шесть особых случаев вещественной арифметики:

1. Неточный результат. Возникает, когда результат операции невозможно точно представить в формате приемника. Например, при делении 1 на 3 получается бесконечная дробь;

2. Численное антипереполнение. Ненулевой результат слишком мал по абсолютной величине для представления в формате приемника. Например, при делении 1 на максимальное число с расширенной точностью 1.2*104932 получается очень маленькое число, которое не может быть представлено в формате с расширенной точностью. В данном случае результатом является денормализованное число. Денормализованными называются числа с плавающей точкой, имеющие в поле порядка все нули и нулевой старший бит мантиссы.

3. Денормализованный операнд. Возникает, когда операндом команды оказывается денормализованное число.

4. Деление на ноль. Результатом операции является бесконечность.

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

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

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

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

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