Jak unums mogą emulować ujemne zero IEEE?

9

Obecnie czytam „Koniec błędu - Unum Computing” Johna Gustafsona ( Youtube ). Nadal nie jestem pewien, w jaki sposób sprawy obsługiwane w IEEE przez ujemnie podpisane zero są obsługiwane przez unumy.

Po pierwsze, unum pozwala na reprezentowanie pewnych dokładnych wartości (podobnie jak zmiennoprzecinkowe) i dodatkowo pozwala na reprezentowanie otwartych przedziałów, które leżą między dokładnymi wartościami (w tym dokładnymi -∞ i ∞). Tak więc cała rzeczywista linia liczb jest reprezentowana przez naprzemienne precyzyjne wartości i otwarte interwały:

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

0,

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

W ten sposób wyjątkowe wartości (w tradycji IEEE), takie jak niedopełnienie i przepełnienie, to tylko niektóre otwarte przedziały. Innymi słowy: te wcześniej specjalne warunki zmieniają się teraz w zwykłe przypadki.

IEEE -∞ odpowiada unii {-∞} i (-∞, -maxreal).

A teraz zero może oznaczać przedziały (-smallsubnormal, 0) i (0, smallsubnormal).

Jednak 1 / (- smallsubnormal, 0) jest teraz (-∞, -maxreal), a nie -∞ sam. Podczas gdy 1/0 to ∞.

Nadal waham się w tym, że w IEEE -0 i +0 porównania są równe. Ale nie łączą się. Wygląda na to, że mapowanie nie jest w 100%. Zastanawiam się więc, czy istnieją przypadki narożników, w których różnica może się pokazywać ((i czy te przypadki są naprawdę istotne)).

(Jestem świadomy dlaczego negatywny zerowy ważny? , Zastosowania do ujemnej wartości zmiennoprzecinkowej )

fałszywe
źródło
1
Dlaczego uważasz, że mapowanie musi być typu 1-do-1? Powody podane w połączonych pytaniach nie stanowią problemu z unums, więc po co robić zero ujemne?
Ordous
@Ordous: Ponieważ (Ch.18.1, s.257) „Unums są nadzbiorem pływaków. Pływaki to po prostu unumy, dla których ubit wynosi zero itd.”. co wszystko (łącznie guess) sugeruje, że można mniej więcej (i na początek) przetłumaczyć rzeczy dosłownie. Jestem w pełni świadomy, że dosłowne tłumaczenie nie w pełni wykorzystuje unum.
fałszywe
5
Trudno jest spierać się o cytat bez posiadania książki pod ręką. Jednak jego slajdy w prezentacji IEEE stanowiły zaletę unum computing: „Nie ma potrzeby niedomiaru”. Stąd: nie ma potrzeby ujemnego zera, ponieważ jest to dokładnie niedopełnienie. Być może mógłbyś rozszerzyć ten system o ujemne zero, ale nie ma powodu, aby to robić. Szczerze mówiąc ujemne 0 w IEEE jest niezgodne z matematyką .
Ordous
@Ordous: Niedomiar jest obsługiwany przez otwarty interwał (-smallsubnormal, 0) i jego dodatni odpowiednik. Są to więc najbliższe wartości -0 i +0. Ale czy ten interwał może naprawdę zachowywać się tak, jakby?
false
8
Przepełnienie nie jest tutaj „obsługiwane”, po prostu nie istnieje . Ujemne 0 jest problemem w IEEE i ten standard próbuje to naprawić wraz z innymi rzeczami. Nie możesz i nie powinieneś równać -0 i +0, ale ponieważ w IEEE ich różnica wynosi 0, muszą być równe. Ten paradoks nie ma dobrego rozwiązania. W unums oni zrobić mieć różnicę, więc one nie mogą być równe. Cały system ma za zadanie naprawiać problemy w IEEE, ale to oznacza, że ​​jest to niekonsekwentne. To jedna ze wspomnianych niespójności. A powodem jest proponowany wbudowany system do wykorzystania starych standardów w jego książce.
Ordous

Odpowiedzi:

3

Zbyt długo na komentarz, więc pisząc to jako odpowiedź ...

Problem z IEEE polega na tym, że mamy trzy przypadki do rozróżnienia, ale tylko dwie reprezentacje dla nich:

  • wartość ujemna, wartość bezwzględna zbyt mała, aby ją przedstawić - jest reprezentowana przez IEEE -0.0 i może być łatwo zmapowana (-smallsubnormal,0)
  • wartość dokładnie null, reprezentowana przez IEEE 0.0, zmapowana na 0
  • wartość dodatnia zbyt mała, aby ją przedstawić; ten ma IEEE reprezentację 0.0 , jak również , ale powinna być odwzorowywane (0, +smallsubnormal).

Problemem nie jest teraz zero ujemne, ale nie możemy rozróżnić, czy IEEE 0.0 jest drugim lub trzecim przypadkiem! Innymi słowy: funkcja mapowania z UNUM na IEEE nie jest biotywna - i nigdy nie będzie, tak jak w przypadku każdej innej wartości IEEE, nigdy nie wiemy, czy jest to dokładna czy przedziałowa!

Myślę więc, że mapowanie -0.0 jest absolutnie w porządku (-smallsubnormal,0)i musimy zdecydować, czy IEEE 0.0 jest raczej mapowane, 0czy może lepiej (0, +smallsubnormal). Osobiście skłaniam się do pierwszego, ale nie jest to zbyt wiarygodne ...

Jeśli chodzi o porównanie z IEEE (-0,0 równe 0,0): Nigdy (prawie) nigdy nie należy porównywać pod kątem dokładnej równości (operator C lub C ++: ==), ale tylko dla wartości bezwzględnej różnicy mniejszej niż jakiś odpowiedni próg. Ten problem został wyeliminowany tylko częściowo nawet z UNUMS, jak teraz można porównać do dokładnej równości, jeśli u-bit jest nie ustawiona, ale to jest zestaw, my wciąż nie wiemy ...

Aconcagua
źródło