Як unums можуть імітувати негативний нуль IEEE?


9

Зараз я читаю "Кінець помилки - обчислюваність Unum" Джона Густафсона ( Youtube ). Я все ще не впевнений у тому, як справи, які розглядаються в IEEE за допомогою негативно підписаного нуля , обробляються unum.

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

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

0,

(0, малий підрядний), малий підрядний, ... максереальний, (мареальний, ∞), ∞

Таким чином (у традиції IEEE) виняткові значення, такі як підтоплення та перелив, - це лише деякі відкриті інтервали. Іншими словами: ці раніше особливі умови перетворюються на звичайні випадки.

IEEE -∞ відповідає об'єднанню {-∞} і (-∞, -maxreal).

І підписаний нуль тепер може бути інтервалами (-smallsubnormal, 0) та (0, smallsubnormal).

Однак 1 / (- малий підрядний, 0) зараз (-∞, -maxreal), а не -∞ поодинці. Тоді як 1/0 є ∞.

Що я все ще вагаюся з цього приводу, це те, що в IEEE -0 і +0 порівнюють рівні. Але вони не в голові. Здається, що відображення не на 100%. Тож мені цікаво, чи є кутові шафи, де різниця може виявитись ((і якщо ці випадки справді актуальні)).

(Я в курсі , чому негативний нуль важливо? , Використання для від'ємного значення з плаваючою точкою )


1
Чому ви думаєте, що для відображення потрібно 1-до-1? Причини, зазначені у зв'язаних вами питаннях, - це питання, які не стосуються unum, тож чому робити негативний нуль?
Звичайний

@Ordous: Тому що (Ch.18.1, p.257) "Unums - це надмножина поплавків. Floats - це просто unum, для яких ubit дорівнює нулю etc.etc." що все (в тому числі guess) говорить про те, що можна більш-менш (і як початок) перекладати речі буквально. Я цілком усвідомлюю, що дослівний переклад не використовує в повній мірі Unum.
помилково

5
Доволі важко сперечатися проти цитати, не маючи книги під рукою. Однак його слайди в презентації IEEE заявляли як перевагу unum обчислень: "Немає необхідності в переливі". Звідси: немає необхідності в негативному нулі, оскільки це саме переповнення. Можливо, ви могли б розширити цю систему, щоб вона включала негативний нуль, але для цього немає підстав. Чесно негативні 0 в IEEE несумісні з математикою .
Звичайний

@Ordous: Underflow обробляється відкритим інтервалом (-smallsubnormal, 0) та його позитивним аналогом. Тож це найближчі речі до -0 та +0. Але чи може цей інтервал дійсно діяти так, ніби?
помилково

8
Підвод тут не "обробляється", він просто не існує . Негативний 0 - це проблема в IEEE, і цей стандарт намагається виправити його разом з іншими речами. Ви не можете і не повинні рівняти -0 і +0, але оскільки в IEEE їх різниця дорівнює 0, вони повинні бути рівними. Цей парадокс не має хорошого рішення. У unums вони роблять є різниця, отже , вони не можуть бути рівні. Вся суть системи полягає у вирішенні проблем в IEEE, але це означає, що це обов'язково суперечить їй. Це одна з сказаних невідповідностей. І причиною є запропонована вбудована система для використання старих стандартів у своїй книзі.
Звичайний

Відповіді:


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-біт не встановлений, але при його встановленні ми все ще не знаємо ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.