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 )
źródło
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.Odpowiedzi:
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:
(-smallsubnormal,0)
0
(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,0
czy 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 ...
źródło