Как unums может эмулировать отрицательный ноль IEEE?

9

В настоящее время я читаю «Конец ошибки - Unum Computing» Джона Густафсона ( Youtube ). Что я до сих пор не уверен, так это то, как дела, обработанные в IEEE с отрицательным знаком нуля , обрабатываются с помощью unums.

Таким образом, прежде всего, unums позволяют представлять определенные точные значения (аналогично плавающим точкам) и дополнительно позволяют представлять открытые интервалы, которые лежат между точными значениями (включая точные -∞ и ∞). Таким образом, полная строка действительных чисел представлена ​​чередующимися точными значениями и открытыми интервалами:

-∞, (-∞, -maxreal), -maxreal, ... -smallsubnormal, (-smallsubnormal, 0),

0,

(0, smallsubnormal), smallsubnormal, ... maxreal, (maxreal, ∞), ∞

Таким образом (в традиции IEEE) исключительные значения, такие как переполнение и переполнение, являются лишь некоторыми открытыми интервалами. Другими словами: эти ранее особые условия теперь превращаются в обычные случаи.

IEEE -∞ соответствует объединению {-∞} и (-∞, -maxreal).

И ноль со знаком теперь может быть интервалами (-smallsubnormal, 0) и (0, smallsubnormal).

Однако 1 / (- smallsubnormal, 0) теперь (-∞, -maxreal) и не -∞ в одиночку. Тогда как 1/0 - это ∞.

Что я до сих пор сомневаюсь, так это то, что в IEEE -0 и +0 сравниваются одинаково. Но они не в униумах. Кажется, что картирование не на 100%. Поэтому мне интересно, есть ли угловые случаи, где разница может проявиться ((и действительно ли эти случаи актуальны)).

(Я в курсе , почему отрицательный нуль важно? , Использование для отрицательного значения с плавающей точкой )

ложный
источник
1
Почему вы думаете, что отображение должно быть 1 к 1? Причины, изложенные в связанных с вами вопросах, не относятся к числу unums, так зачем же ставить отрицательный ноль?
Орден
@Ordous: Потому что (Ch.18.1, p.257) «Unums - это надмножество чисел с плавающей точкой. Floats - это просто Unum, для которых ubit равен нулю и т. Д.» что все (в том числе guess) говорит о том, что можно более или менее (и для начала) переводить вещи буквально. Я полностью осознаю, что буквальный перевод не в полной мере использует преимущества unums.
ложь
5
Трудно спорить с цитатой, не имея книги под рукой. Однако его слайды в презентации IEEE отмечены как преимущество unum computing: «Нет необходимости в недостаточном объеме». Отсюда: нет нужды в отрицательном нуле, так как он точно в норме. Может быть, вы могли бы расширить эту систему, чтобы включить отрицательный ноль, но нет причин для этого. Честно говоря, отрицательный 0 в IEEE несовместим с математикой .
Ordous
@Ordous: Underflow обрабатывается открытым интервалом (-smallsubnormal, 0) и его положительным аналогом. Так что это самое близкое к -0 и +0. Но может ли этот интервал действительно действовать так, как если бы?
ложь
8
Underflow не «обрабатывается» здесь, он просто не существует . Отрицательный 0 является проблемой в IEEE, и этот стандарт пытается исправить это вместе с другими вещами. Вы не можете и не должны равнять -0 и +0, но поскольку в IEEE их разность равна 0, они должны быть равны. Этот парадокс не имеет хорошего решения. В unums они делают есть разница, следовательно , они не могут быть равны. Весь смысл системы состоит в том, чтобы исправить проблемы в IEEE, но это означает, что она обязательно несовместима с ней. Это одно из указанных несоответствий. И причина в том, что в его книге предлагается встроенная система для использования старых стандартов.
Ordous

Ответы:

3

Слишком долго для комментария, поэтому пишу это как ответ ...

Проблема с IEEE состоит в том, что у нас есть три случая для дифференциации, но только два представления для них:

  • отрицательное значение, абсолютное значение слишком маленькое для представления - это представлено IEEE -0.0 и может быть легко сопоставлено с (-smallsubnormal,0)
  • значение точно нулевое, представленное IEEE 0.0, сопоставленное с 0
  • положительное значение слишком мало для представления; это один имеет IEEE представление 0.0 , а также , но должны быть сопоставлены с (0, +smallsubnormal).

Проблема сейчас не в отрицательном нуле, а в том, что мы не можем различить, если IEEE 0.0 - это второй или третий случай! Другими словами: функция отображения из UNUM в IEEE не является биективной - и никогда не будет, как и для любого другого значения IEEE, мы никогда не узнаем, является ли оно точным или интервальным!

Так что я думаю, что абсолютно нормально отображать -0.0 в (-smallsubnormal,0), и нам нужно решить, является ли IEEE 0.0 скорее сопоставленным 0или, возможно, лучше (0, +smallsubnormal). Я лично склоняюсь к первому, но это не очень авторитетно ...

Что касается сравнения с IEEE (-0.0 равно 0.0): в любом случае (почти) никогда не следует сравнивать точное равенство (оператор C или C ++: ==), но только для абсолютного значения разности, которое меньше некоторого соответствующего порога. Эта проблема устранена только частично даже с помощью UNUMS, поскольку теперь мы можем сравнивать точное равенство, если бит u не установлен, но с его установкой мы все еще не знаем ...

Аконкагуа
источник