, kurz Unum, sind ein Gleitkommazahlen-Format, das von John L. Gustafson, bekannt durch Gustafsons Gesetz, als Alternative zu den vorherrschenden Gleitkommazahlen entwickelt wurde. Die erste Version von Unums wird retrospektiv als Typ I bezeichnet, als danach Typ II und später Typ III veröffentlicht wurden.
Der wesentlichste interne Unterschied zu Gleitkommazahlen ist das variable Format. Während durch den Standard – lediglich abhängig von der Bit-Zahl – eine feste Anzahl von Exponenten- und Mantissen-Bits vorgeschrieben ist, sind diese bei Unums variabel. Allen Unum-Formaten ist gemein, dass arithmetische Über- und Unterläufe nicht zu Unendlichkeiten degenerieren, sondern bei dem betragskleinsten bzw. -größten Intervallen bzw. Zahlen verbleiben. Laut Gustafson ist der numerische Fehler beim Abgleiten von endlichen Ergebnissen ins Unendliche unendlich, wohingegen das Zuweisen eines endlichen Werts möglicherweise ein großer, jedoch endlicher Fehler ist.
Zahlenmodell 300px|mini|Darstellung der projektiven Geraden als Kreis mit unten, oben, links und rechts
Das mathematische Zahlenmodell hinter und Unums ist die projektive Gerade, also die reellen Zahlen zusammen mit einem unendlich fernen Punkt , der durch Zahlen mit großem Betrag erreicht wird, egal ob negativ oder positiv. Wie ist ohne Vorzeichen und wird von der negativen und der positiven Seite gleichermaßen erreicht. In der Praxis von Gleitkommazahlen sind , unendliche und undefinierte Werte grundsätzlich Spezialfälle; gewisse Metriken, die beispielsweise relative Genauigkeit angeben, sind darauf nicht sinnvoll anwendbar. Bei Unums wird für undefinierte Werte verwendet. Operationen auf endlichen Zahlen, die mathematisch wohldefiniert sind, produzieren nie als Ergebnis. Somit entspricht mehr einem aus IEEE 754 als dessen unendlichen Werten. Wird beispielsweise durch die Addition zweier großer Zahlen der Wertebereich nach oben verlassen, runden Gleitkommazahlen zu ; in und Unums ist das Ergebnis dann ein Objekt, das das offene Intervall zwischen der größten exakt darstellbaren Zahl und beschreibt. Unums stellen keine Intervalle dar, sie verbleiben dann bei dem größten endlichen Wert.
Das Zahlenmodell hinter Unums und IEEE 754 ist hingegen die abgeschlossene reelle Gerade, also die reellen Zahlen zusammen mit separaten Werten für und . Dazu gesellen sich außerdem undefinierte Werte, auch NaN für engl. genannt. Ferner unterscheidet IEEE 754 die Zahlen und .
Grundsätzlich gibt es für jedes Unum ein eindeutiges, genau dargestelltes Negatives und bei Unums einen eindeutigen, genau dargestellten Kehrwert , wohingegen ein solcher Kehrwert für Unums nur für und Zweierpotenzen garantiert ist. In der üblichen Darstellung der projektiven Geraden (s. Bild) entspricht die Negation der Spiegelung an der vertikalen und die Kehrwertbildung an der horizontalen Achse; insbesondere gilt und .
Typ I Die erste Format von Unums, im Nachhinein Typ I genannt, war als Erweiterung der Gleitkommazahlen konzipiert. Es verwendet in seiner Darstellung ein (u für engl. , unpräzise) am Ende, das angibt, ob die Zahl präzise oder ein offenes Intervall zwischen nebeneinanderliegenden Gleitkommazahlen ist (). Das Layout ist dasselbe wie bei Gleitkommazahlen, jedoch variiert die Anzahl der Exponenten- und Mantissenbits automatisch bzw. sind beide frei wählbar. Unums sind eine einfache Lösung für Intervallarithmetik.
Gustafson entwickelte Unums aus der Erfahrung, dass die Kompatibilität wenig Nutzen bringt, aber viel Aufwand verursacht, der Teil mit Intervallarithmetik sich hingegen effizient umsetzen ließ.
Typ II Die zweite Version von Unums verwirft die Kompatibilität zu Gleitkommazahlen zugunsten großer Flexibilität. Die Haupterkenntnis war, dass sich vorzeichenbehaftete ganze Zahlen gut auf die projektive Gerade abbilden lassen, wobei der Überlauf bewusst in Kauf genommen wird, dafür die Ordnungsrelation erhalten bleibt. Insbesondere hat bei vorzeichenbehafteten Ganzzahlformaten mit Zweierkomplement-Darstellung von negativen Zahlen die kleinste negative Zahl (die mit maximalem Betrag) die Eigenschaft, ihr eigenes Negatives zu sein. Als Ganzzahl ist dieser Randfall gelegentlich ein Hindernis, für den unendlich fernen Punkt in der projektiven Geraden ist diese Eigenschaft hingegen natürlich und wünschenswert.
Wie Unums interpretieren Unums das letzte Bit in der Darstellung als , das ein offenes Intervall zwischen exakten Zahlen repräsentiert. Diese Intervalle können am Ende der Berechnung kollabiert werden, etwa auf ihren arithmetischen oder geometrischen Mittelpunkt.
Für ein Unum-Format werden reelle, nicht notwendigerweise rationale, Zahlen größer als ausgewählt und im ersten Quadranten auf der projektiven Geraden angesiedelt. Die anderen Quadranten ergeben sich durch Negativen- und Kehrwertbildung. Ein Wort hat Zustände, davon wird die Hälfte von Intervallen belegt und drei beliebige der vier Quadranten ergeben sich aus dem jeweils vierten. Da als Wahl fest vergeben wird, gibt es eine Option weniger als .
Ein Beispiel für ein dezimales Format: Gewünscht wird die exakte Darstellung der Zahlen , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , . Die als Inverse angegebenen Zahlen sind Wünsche für den vierten Quadranten, auf eine Weise ausgedrückt, auf die sie ins Schema passen.
Die Operationen für Unums lassen sich im Allgemeinen nur durch eine Wertetabelle implementieren, was sie für Bitzahlen größer als ca. 20 behäbig macht, da Wertetabellen für zweistellige Operationen quadratisch anwachsen.
Gustafson entwickelte Unums, da sich Unums als schwerfällig für verschmolzene (engl. ) Operationen wie Fused multiply-add herausstellten. Das Ziel von Unums ist also, die Vorteile von Unums software- und hardware-freundlich umzusetzen.
SoRNs Da die Formate vom Typ I und II die Zahlenbereiche flexibel und anwendungsspezifisch zulassen, reichen oft geringe Bitlängen aus. Im Fall von 8 Bit kann bereits ein Wort eine beliebige Vereinigung von Intervallen darstellen (da 28 = 256, siehe Kardinalität der Potenzmenge). In diesem Kontext werden die exakten Zahlen als Einermenge mit ebendieser Zahl und als die Paarmenge gesehen, aber der Einfachheit wegen auch als Intervall bezeichnet. Ein so interpretiertes Wort heißt für engl. , zu deutsch (Teil-)Menge der reellen Zahlen. Dabei gibt das ‑te Bit an, ob das Intervall mit der Darstellung eine Teilmenge der SoRN ist. Als Ergebnis einer Operation bedeutet ein SoRN, dass die mathematisch exakte Lösung darin enthalten ist. Eine korrekte Implementierung vorausgesetzt, ist die Aussage im mathematischen Sinn wahr und keine Approximation mit unbekannten Fehlerschranken.
Die Angabe von SoRNs ist üblicherweise als Intervall oder als Vereinigung von Intervallen, falls Lücken bestehen. Dabei wird hier der Deutlichkeit wegen in der unteren Grenze und in der oberen Grenze geschrieben. Insbesondere stellt das Intervall die Menge der reellen Zahlen dar. Als offenes Intervall ist ansonsten die leere Menge.
Im Vergleich zu Intervallarithmetik sind SoRNs auch dann gutartig, wenn sonst Stellenauslöschung oder durch unerkannte Abhängigkeiten jeder Iterationsschritt zu einem exponentiellen Genauigkeitsverlust führt. Wenn nicht gerade mit einem einelementigen Intervall begonnen wird, divergiert beispielsweise jede Folge von Intervallen nach traditioneller Intervallarithmetik, die durch wiederholte Anwendung der Operationen oder entsteht (das heißt, die Intervalle werden immer größer und damit als Abschätzung unbrauchbar), wohingegen die von SoRNs beschriebenen Intervalle stetig kleiner werden und das Ergebnis festnageln.
Arithmetik Auf SoRNs lässt sich die Arithmetik der Unums fortsetzen: Sind und zwei SoRNs, so ist das SoRN, das aus den Unums mit aus und aus besteht. Analog wird Multiplikation definiert; Subtraktion und Division ergibt sich als gemäß und entsprechend gemäß . Die einstelligen Operationen und werden auf die Einzelelemente angewendet. In mathematischer Notation:
Mit SoRNs sind auch Operationen möglich, deren Ergebnis auch im mathematischen Sinn nicht immer eine einzelne Zahl ist. Beispielsweise ist die Quadratwurzel-Funktion für negative Eingaben undefiniert. Als Operation auf SoRNs liefert entsprechend das leere SoRN. Grundsätzlich ist es zwar möglich, auf jede undefinierte Operation das leere Ergebnis zu liefern, aber in gewisser Hinsicht sind andere Ergebnisse oft besser. Beispielsweise ist die Antwort auf Frage: Welche Zahl löst die Gleichung ? Für und ist diese Antwort: jede Zahl. Daher ergibt das volle SoRN. Dasselbe gilt für und (was dasselbe sein muss, da ). Ein Beispiel für eine undefinierte Operation, die weder das leere noch das volle SoRN liefert, ist mit der Lösungsmenge , also einem SoRN, das , und alle positiven Intervalle umfasst.
Beispielsweise gegeben das SoRN . Der Logarithmus davon (egal zu welcher Basis) ergibt . Das Quadrat von diesem Ergebnis ist .
Ein weiteres Beispiel sei die Funktion mit . Was ist ? Eine Rechnung mit Unums ergibt . Nun ist es so, dass auch ist, wodurch die Definitionslücke bei 0 verschwindet, und das Ergebnis bestätigt. Doch was, wenn die Eingabe nicht genau bekannt war, sondern als das SoRN gegeben wird? Wird die erste Darstellung von verwendet, liefern die Operationen auf Unums exakte Ergebnisse und das Ergebnis-SoRN repräsentiert die Aussage . Für den zweiten Ausdruck mit traditioneller Intervallarithmetik wird zuerst das Eingabeintervall zu abgeschlossen (da traditionelle Intervallarithmetik nur mit abgeschlossenen Intervallen arbeitet). Das Ergebnis ist dann ernüchternd: . In der zweiten Darstellung kommt zweimal vor; dass es sich dabei zweimal um derselben Wert (innerhalb der Grenzen) handeln muss und nicht um zwei unabhängige Werte mit denselben Grenzen, wird aber beim mechanischen Auswerten nicht berücksichtigt.
Lauflängen-Kodierung Ein SoRN gilt als zusammenhängend, wenn in seiner Darstellung alle Einsen gepackt nebeneinander stehen (schließt das leere SoRN mit ein). Weil an beiden Enden des Zahlenstrahls liegt, aber nur einmal im SoRN kodiert wird, ist das SoRN im mathematischen Sinn zwar nicht zusammenhängend (genauer: im Sinne der projektiven Geraden ist die Menge schon zusammenhängend, aber nicht im Sinne eines Zahlenstrahls mit Endpunkten), wohl aber das SoRN, das es darstellt. Die arithmetischen Grundoperationen und viele andere wie die Wurzel erhalten zusammenhängende SoRNs, das heißt, für zusammenhängende SoRNs als Eingaben liefern sie zusammenhängende SoRNs als Ergebnis. Daher bietet sich eine sogenannte Lauflängen-Kodierung (engl. ) an. Statt mit beliebigen SoRNs werden damit nur zusammenhängende dargestellt. Die Lauflängen-Kodierung speichert den Beginn und die Länge der Einser-Kolonne. Für 256 Stellen genügen 8 Bit für je den Beginn und die Länge, somit benötigt die Lauflängen-Kodierung insgesamt 16 Bit. Nur das volle SoRN ist zusammenhängend, kann aber streng genommen nicht so dargestellt werden, da seine Länge (256 Einsen) gerade das Maximum (255) in der Längendarstellung überschreitet. Dem kann abgeholfen werden, da für das leere SoRN formal mehrere Darstellungen existieren, nämlich alle mit Länge 0. Davon wird eine für das volle SoRN umgedeutet.
Insbesondere ist eine Lauflängen-Kodierung für SoRNs effektiver, je höher die Anzahl der Bits ist. Für Unums wäre ein allgemeines SoRN 65.536 Bit breit, also knapp 8 KiB groß. Die Lauflängen-Kodierung benötigt nur 32 Bit.
Beispiel Für das Beispiel wird ein Unum verwendet, wobei die einzige wählbare Zahl 2 ist. Es gibt die 16 Intervalle , , , , , , , , , , , , , , und . Ein Teilmengen-Wort besteht damit aus Bit.
Allgemein braucht es die Lauflängen-Kodierung von Bit genau Bits.
Typ III