В настоящее время я читаю «Конец ошибки - 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%. Поэтому мне интересно, есть ли угловые случаи, где разница может проявиться ((и действительно ли эти случаи актуальны)).
(Я в курсе , почему отрицательный нуль важно? , Использование для отрицательного значения с плавающей точкой )
guess
) говорит о том, что можно более или менее (и для начала) переводить вещи буквально. Я полностью осознаю, что буквальный перевод не в полной мере использует преимущества unums.