Понимание полезности денормализованных чисел с плавающей точкой - PullRequest
0 голосов
/ 04 июля 2018

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

Он утверждает, что иметь денормализованные числа хорошо, потому что x = y тогда и только тогда, когда x-y==0. Затем он приводит пример:

если (x! = Y), то z = 1 / (x-y)

Теперь предположим, что x-y - это денормализованное число. Тогда есть большая вероятность, что 1/(x-y) станет inf. Что является тем же результатом, если у нас не было денормализованных чисел во-первых.

Даже если я хочу выполнить деление и избежать результатов inf, то удобнее, если у нас нет денормализованных чисел:

if (x-y) then z = 1/(x-y) // here, we know that z is not inf

Я не могу добиться того же с денормализованными числами, поскольку x-y может быть не нулем, а денормализованным числом, и тогда деление 1/(x-y) приведет к inf. Так вот, денормализованные числа на самом деле вызывают проблемы.

Почему хорошо иметь x=y тогда и только тогда, когда x-y=0?

Когда полезны денормализованные числа?

1 Ответ

0 голосов
/ 04 июля 2018

Некоторые баллы от Уильяма Кахана о постепенном снижении :

  • Если формат с плавающей запятой имеет ненормальные значения, промежутки между представляемыми значениями не увеличиваются при уменьшении чисел. Это помогает при написании доказательств, поскольку можно утверждать, что, если разница между x 0 и его ближайшим соседом равна u , то для любого x x 0 , разница между x и его ближайшим соседом составляет не более u . Затем вы можете продолжить и заключить, что ошибка, вызванная некоторой последовательностью вычислений, имеет не более некоторого значения, если входные данные находятся в пределах границ. Без субнормальных значений вам пришлось бы писать исключения, в которых вы рассматриваете случаи, когда промежуточные значения теряются, разбиваете ваше доказательство на несколько случаев, исключает определенные части домена для доказательства и т. Д.
  • x ± y не может опуститься, так как субнормальное различие является точным.
  • Сумма продуктов меньше подвержена ошибкам округления из-за ненормальных терминов, если хотя бы один термин является нормальным.

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

Пока вы приводите этот пример:

if (x-y) then z = 1/(x-y) // here, we know that z is not inf

, которая имеет ограниченную утилиту, поскольку это не так в if (x-y) then z = 4/(x-y).

...