NaN делятся на 2 класса:
Сигнализирующие нечисла (SNaN) содержат «0» в старшем разряде дробной части мантиссы, остальные биты мантиссы произвольные.
QNaN содержат «1» в старшем бите дробной части мантиссы. Частным случаем QNaN является неопределенность, представляемая в виде:
|
Значения неопределенности используется как результат выполнения операции с недопустимыми операндами, если случай недействительной операции IE замаскирован.
Примерами таких случаев могут являться:
1) сложение бесконечностей с разными знаками;
2) вычитание бесконечностей с одинаковыми знаками;
3) умножение бесконечностей на ноль;
4) деление 0/0 или ∞/∞;
5) извлечение квадратного корня из отрицательного числа (FSQRT);
6) вычисление логарифма из отрицательного числа.
Структуры регистров состояния и управления
FPSR (SW – Status Word, слово состояния)
FPCR (CW – Control Word, слово управления)
6 младших бит SW используются для фиксирования особых случаев FPU. В аналогичных разрядах CW содержит биты масок для разрешения или запрещения прерывания по соответствующим причинам. Разрешающим значением маски является «0», запрещающим – «1».
Особые случаи FPU
1) IE (Invalid operation Error) – недействительная операция.
Этот особый случай возникает в стековых или арифметических операциях.
SF (Stack Fault) – нарушение стека.
Предназначен для фиксирования ошибок при работе с регистровым стеком. Для уточнения вида особого случая при работе со стеком (когда IE = 1 и SF = 1) используется бит C1 кода условия (C3-C0).
Установка бита C1 свидетельствует о переполнении стека, попытка записи в непустой регистр, а сброс бита C1 – об антипереполнении стека, попытка извлечения операнда из пустого регистра.
Примеры возникновения особого случая IE в арифметических операциях приведены ранее (см. случаи формирования неопределенности в качестве результата операции).
2) DE (Denormalized operand Error) – денормализованный операнд.
Этот особый случай фиксируется, если операнд команды FPU представляет собой денормализованное число.
Наличие денормализованных операндов ухудшает точность операций из-за потери большого числа младших битов мантиссы. В связи с этим в некоторых приложениях, требующих высокой точности измерений, следует избегать операций с денормализованными операндами. Как правило, этот особый случай маскируется, и вычисления продолжаются без выхода на прерывание. Анализ потери точности производится при получении окончательного результата.
Кроме того, как было отмечено ранее, при использовании денормализованного операнда из памяти в форматах ОТ/ДТ его преобразование во внутренний формат РТ приводит к нормализации.
3) ZE – divide by Zero Error.
Возникает при попытке деления конечного ненулевого числа на ноль, что может иметь место непосредственно в команде деления FDIV или её многочисленных модификациях:
F(I)DIV(R)(P), R – Reverse
В обратной операции операнды меняются местами, например:
FDIV dst, src; dst/src → dst
FDIVR dst, src; src/dst → dst
Особый случай ZE может возникать при выполнении команд: FXTRACT, FYL2X, FYL2XP1.
Первая из команд EXTRACT – Exponent and Significant (выделение мантиссы и порядка).
Команда разделяет число с плавающей точкой на две составляющие: мантиссу и порядок. Мантисса представляется в регистре ST(0) в виде вещественного числа с тем же знаком, что и исходный операнд, и с порядком равным нулю. Порядок также представляется в виде вещественного числа со знаком без смещения в регистре ST(1).
Эту команду удобно использовать совместно с командой FBSTP для преобразования результатов вычислений с плавающей точкой, с дальнейшим их отображением в десятичной системе счисления на дисплее или принтере.
Команда FXTRACT приводит к особому случаю ZE, если её операнд является нулем. Аналогичный случай имеет место при выполнении вторых двух команд вычисления логарифмов, которые вычисляют значения:
(I)
(II)
4) OE – Overflow Error.
Особый случай OE возникает, когда результат операции в формате приемника выходит за границу диапазона представления, т.е. или .
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.