Причинение недоиспользования в формате с плавающей запятой ieee-754 с использованием вычитания

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

Дайте два числа X и Y, представленные в формате IEEE754, так что вычисление X-Y приведет к переполнению.

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

ПОЖАЛУЙСТА, ПОМОГИТЕ!!! спасибо

Ответ 1

Когда обработка обработки исключений по умолчанию действует, вычитание, которое создает крошечный (в субнормальном интервале 1) ненулевой результат, концептуально вызывает исключение underflow, но нет наблюдаемого эффекта, потому что:

  • Вычитание, которое производит крошечный результат, обязательно является точным из-за характеристик формата с плавающей запятой (нет значимых бит ниже битов в субнормальном значении, а вычитание, в отличие от умножения, не может математически иметь какие-либо младшие биты чем есть на входах).
  • В стандарте IEEE 754-2008 говорится, что при переполнении по умолчанию с обработкой исключений по умолчанию, и результат является точным, флаг (включая флаг underflow) не создается. И, поскольку обработка исключений по умолчанию действует, нет никакой ловушки (исключительная смена программного управления).

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

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


1 В 32-битном двоичном формате число является крошечным, если его величина меньше 2 -126. В 64-битном формате число является маленьким, если его величина меньше 2 -1023. Стандарт IEEE 754 позволяет определять тонкость до или после того, как результат округлен до нормальной значащей длины.

Ответ 2

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