Wie können Unums die negative Null von IEEE emulieren?


9

Ich lese gerade "Das Ende des Fehlers - Unum Computing" von John Gustafson ( Youtube ). Was ich immer noch nicht sicher bin, ist, wie die Fälle, die in IEEE durch negativ vorzeichenbehaftete Null behandelt werden, mit Unums behandelt werden.

Unums erlaubt es also zunächst, bestimmte exakte Werte darzustellen (ähnlich wie Gleitkommawerte) und zusätzlich die offenen Intervalle darzustellen, die zwischen exakten Werten liegen (einschließlich exakter -∞ und ∞). Die gesamte reelle Zahlenlinie wird also durch abwechselnde genaue Werte und offene Intervalle dargestellt:

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

0,

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

Auf diese Weise sind die (in der IEEE-Tradition) außergewöhnlichen Werte wie Unterlauf und Überlauf nur einige offene Intervalle. Mit anderen Worten: Diese ehemals besonderen Bedingungen werden nun zu regulären Fällen.

IEEEs -∞ entspricht der Vereinigung von {-∞} und (-∞, -maxreal).

Und die vorzeichenbehaftete Null kann jetzt die Intervalle (-smallsubnormal, 0) und (0, smallsubnormal) sein.

1 / (- smallsubnormal, 0) ist jetzt (-∞, -maxreal) und nicht -∞ allein. Während 1/0 ∞ ist.

Was ich immer noch zögere, ist, dass in IEEE -0 und +0 gleich verglichen werden. Aber sie sind nicht in Unums. Es scheint, dass das Mapping nicht 100% ist. Ich frage mich also, ob es Eckfälle gibt, in denen sich der Unterschied zeigen kann ((und ob diese Fälle wirklich relevant sind).

(Mir ist bewusst, warum negative Null wichtig ist. , Verwendet für negativen Gleitkommawert )


1
Warum sollte das Mapping 1: 1 sein? Die Gründe, die in den von Ihnen verlinkten Fragen angegeben sind, sind kein Problem mit Unums. Warum also eine negative Null machen?
Ordous

@Ordous: Weil (Ch.18.1, S.257) "Unums sind eine Obermenge von Floats. Floats sind einfach Unums, für die das Ubit Null ist usw. usw." was alles (einschließlich guess) darauf hindeutet, dass man Dinge mehr oder weniger (und zu Beginn) wörtlich übersetzen kann. Mir ist völlig bewusst, dass eine wörtliche Übersetzung unums nicht voll ausnutzt.
falsch

5
Es ist ziemlich schwierig, gegen ein Zitat zu argumentieren, ohne das Buch zur Hand zu haben. Seine Folien in der IEEE-Präsentation gaben jedoch als Vorteil von Unum Computing an: "Keine Notwendigkeit für Unterlauf". Daher: Keine Notwendigkeit für eine negative Null, da sie genau unterläuft. Vielleicht könnten Sie dieses System um eine negative Null erweitern, aber es gibt keinen Grund dafür. Ehrlich gesagt ist eine negative 0 in IEEE nicht mit der Mathematik vereinbar .
Ordous

@Ordous: Der Unterlauf wird vom offenen Intervall (-smallsubnormal, 0) und seinem positiven Gegenstück behandelt. Das sind also die nächsten Werte für -0 und +0. Aber kann dieses Intervall wirklich so wirken, als ob?
Falsch

8
Underflow wird hier nicht "gehandhabt", es existiert einfach nicht . Negative 0 ist ein Problem in IEEE und dieser Standard versucht es zusammen mit anderen Dingen zu beheben. Sie können und sollten nicht -0 und +0 gleichsetzen, aber da in IEEE ihre Differenz 0 ist, müssen sie gleich sein. Dieses Paradoxon hat keine gute Lösung. In Unums sie tun , einen Unterschied haben, damit sie nicht gleich sein. Der gesamte Sinn des Systems besteht darin, Probleme in IEEE zu beheben, aber das bedeutet, dass es notwendigerweise nicht damit vereinbar ist. Dies ist eine der genannten Inkonsistenzen. Und der Grund dafür ist, dass in seinem Buch ein eingebautes System vorgeschlagen wird, um alte Standards zu verwenden.
Ordous

Antworten:


3

Zu lang für einen Kommentar, also schreibe dies als Antwort ...

Das Problem mit IEEE ist, dass wir drei Fälle unterscheiden müssen, aber nur zwei Darstellungen für diese:

  • negativer Wert, absoluter Wert zu klein, um dargestellt zu werden - dies wird durch IEEE -0.0 dargestellt und kann leicht zugeordnet werden (-smallsubnormal,0)
  • Wert genau null, dargestellt durch IEEE 0.0, zugeordnet auf 0
  • positiver Wert zu klein, um dargestellt zu werden; dieser hat IEEE Darstellung 0.0 und soll aber abgebildet werden (0, +smallsubnormal).

Das Problem ist jetzt nicht die negative Null, sondern dass wir nicht unterscheiden können, ob ein IEEE 0.0 der zweite oder dritte Fall ist! Mit anderen Worten: Die Zuordnungsfunktion von UNUM zu IEEE ist nicht bijektiv - und wird es auch nie sein, wie bei jedem anderen IEEE-Wert, wir wissen nie, ob es der genaue oder der Intervallwert ist!

Ich denke, es ist absolut in Ordnung, -0.0 zuzuordnen (-smallsubnormal,0), und wir müssen uns entscheiden, ob IEEE 0.0 eher zugeordnet 0oder möglicherweise besser zugeordnet werden soll (0, +smallsubnormal). Ich persönlich tendiere zum ersten, aber das ist nicht sehr maßgeblich ...

Zum Vergleich mit IEEE (-0,0 ist gleich 0,0): Man sollte (fast) niemals auf exakte Gleichheit vergleichen (C- oder C ++: == -Operator), sondern nur, wenn der absolute Wert der Differenz kleiner als ein geeigneter Schwellenwert ist. Dieses Problem wird auch mit UNUMS nur teilweise beseitigt, da wir jetzt die exakte Gleichheit vergleichen können , wenn das U-Bit nicht gesetzt ist, aber wenn es gesetzt ist, wissen wir immer noch nicht wirklich ...

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.