Организация вычислительных систем


Математические сопроцессоры фирмы Intel - часть 3


Эти флажки могут быть использованы для условных переходов.

Младший байт регистра состояния содержит флажки особых случаев сопроцессора: переполнение стека, потеря точности, потеря значащих разрядов, численное переполнение, деление на ноль, денормализация, недействительная операция. Если соответствующий особый случай возник и не был замаскирован (в слове управления), это приведет к генерации центральным процессором особого случая сопроцессора (#16).

Младшее слово регистра управления содержит биты масок особых случаев. Сопроцессор допускает индивидуальное маскирование особых случаев. Если тот или иной особый случай замаскирован, при возникновении соответствующей ситуации сопроцессор выполняет некоторые заранее определенные внутренние действия, которые зачастую приемлемы для большинства применений. Например, если замаскирован особый случай деления на ноль, то выполнение операции 85,32/0 даст результат + ?.

Старшее слово регистра управления содержит два поля: управление точностью PC (биты 8 и 9) и управление округлением RC (биты 10 и 11). Биты управления точностью можно использовать для понижения точности вычислений. По умолчанию используется расширенная точность (PC = 112), можно также использовать двойную точность (PC = 102) и одинарную точность (PC = 002) по стандарту IEEE-754.

Если результат численной операции не может быть точно представлен в выбранном формате, сопроцессор выполняет округление в соответствии с полем RC (табл. 8.3). По умолчанию RC = 00. В примерах в табл. 7.3 сделана попытка представить числа +2,23 и +2,05 в виде двоичных вещественных чисел с 3-битной дробной частью мантиссы. В этом формате нельзя подобрать точное двоичное значение для этих чисел. Ближайшие к ним представимые числа - +2,00 (+1,000E21) и +2,25 (+1,001E21).

Таблица 8.3. Режимы округления сопроцессоров Intel x87

RCРежим

Пример 1

1,000E21 < 2,23E100 < 1,001E21

-1,001E21 < -2,23E100 < -1,000E21

Пример 2

1,000E21 < 2,05E100 < 1,001E21

-1,001E21 < -2,05E100 < -1,000E21

00Округление к ближайшему (или четному)2,23E100 ? 1,001E21-2,23E100 ? -1,001E212,05E100 ? 1,000E21-2,05E100 ? -1,000E21
01Округление вниз (к ?)2,23E100 ? 1,000E21-2,23E100 ? -1,001E212,05E100 ? 1,000E21-2,05E100 ? -1,001E21
10Округление вверх (к +?)2,23E100 ? 1,001E21-2,23E100 ? -1,000E212,05E100 ? 1,001E21-2,05E100 ? -1,000E21
11Округление к нулю (усечение)2,23E100 ? 1,000E21-2,23E100 ? -1,000E212,05E100 ? 1,000E21-2,05E100 ? -1,000E21




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