Численное переполнение наступает тогда, когда результат превышает наибольшее конечное число в формате приемника. Переполнение опасно, так как знак может оказаться неверным, а результат будет не бесконечность, а слишком большое для представления число.
Пример: деление большого числа на малое число (близкое к 0). Знак результата будет зависеть от знака малого числа, хотя он может быть неверным в результате ошибки округления.
Специальное значение формируется в зависимости от режима округления, установленного в регистре управления сопроцессора:
1) если установлен режим округления к ближайшему числу - то результат- плюс или минус бесконечность;
2) если установлен режим округления к минус бесконечности, то для положительных чисел результат - максимальное число больше нуля, для отрицательных чисел - минус бесконечность;
3) если установлен режим округления к плюс бесконечности, то для положительных чисел результат – плюс бесконечность, а для отрицательных чисел - максимальное число меньше нуля;
4) если установлен режим округления к нулю, то для положительных чисел результат - максимальное число больше нуля, для отрицательных чисел - максимальное число меньше нуля.
4.3.6.Недействительная операция.
Возникает, когда нет приемлемого результата в арифметической операции, операции сравнения или при стековых операциях (при этом флаг SF в регистре состояния равен единице):
при реализации операций сложения, вычитания, умножения и деления может возникнуть особый случай недействительной операции (например, при запрещенных операциях с бесконечностью);
- при реализации операции сравнения результатом является код условия. Обычно он показывает отношения “<”, “=”, “>”. Если при этом возникает особый случай недействительной операции (например, в проективном режиме при сравнении бесконечности и конечного числа, или при сравнении нечисла и конечного числа), то код условия принимает специальное значение “не сравнимы”. При этом нарушается закон трихотомии арифметики : . Это вызывает трудности в языках высокого уровня при исполнении оператора IF, так как, например, отрицанием условия больше или равно является не только меньше, но и “не сравнимы”;.
особый случай стека: переполнение, то есть попытка включения числа в заполненный стек или антипереполнение, то есть попытка извлечения числа из пустого стека;
Во всех случаях результатом недействительной операции будет нечисло (NAN).
Нечисло – это двоичное вещественное число, у которого в поле порядка все единицы, а в поле мантиссы - все, кроме значения, зарезервированного за бесконечностью, то есть 1.000000...0.
Если один или оба операнда в операции -нечисло - то результатом тоже является нечисло. Таким образом, полученное в промежуточном результате операции нечисло распространяется в вычислениях и выдается как окончательный результат.
Особый случай нечисла - неопределенность. Сопроцессор формирует неопределенность как результат недействительной операции (остальные нечисла формируются программистом).
Для вещественных чисел неопределенность - это нечисло у которого в поле мантиссы две старшие цифры – единицы, а все остальные – нули (1.1...00), а поле порядка одни единицы (11...11). Поле знака также равно единице.
Для формата десятичных чисел неопределенность имеет следующее представление :
Знак
мусор
75 - 78
71 - 74
67 - 70
63 - 66
0 - 62
хх...хх
Десятичную неопределенность нельзя преобразовать в вещественное число, результат при этом - неопределенность.
Для двоичных целых форматов неопределенность представляется максимальным по модулю отрицательным числом, то есть имеет код
0000...00
Знак
Целочисленная неопределенность при преобразовании в формат с плавающей точкой дает обычное отрицательное число.
Попытка преобразования нечисла, денормализованного, ненормализованного числа или бесконечности в формат целых чисел вызывает особый случай недействительной операции, результатом которой и является неопределенность.