- IEEE 754r
-
IEEE 754r ist eine notwendig gewordene Revision des vor etwa 20 Jahren (1985) verabschiedeten Gleitkommastandards IEEE 754. Der alte Standard war sehr erfolgreich und wurde in zahlreichen Prozessoren und Programmiersprachen übernommen. Die Diskussion über die Revision begann im Jahr 2001; im Juni 2008 wurde der Standard angenommen.
Inhaltsverzeichnis
Hauptziele
Hauptziele sind:
- das Zusammenführen von IEEE 754 und IEEE 854
- die Reduktion von Implementierungsalternativen
- die Entfernung von Mehrdeutigkeiten aus IEEE 754
- ein zusätzliches kumulierendes Produkt (fused multiply-add: FMA(A, B, C) = A·B + C)
- halbe und vierfache Genauigkeit (Formate für 16, 32, 64 und 128 Bit)
- die von der Finanzwirtschaft als notwendig erachteten Dezimalformate (IEEE 854)
- weitere variable und Austauschformate
- min und max mit Spezifikationen für die Spezialfälle ±0, ±∞
- Kosmetik: ab sofort soll „denormalisiert“ „subnormal“ heißen
Der Standard soll Formate und Methoden für Gleitkommaarithmetik sowie eine Mindestqualität definieren.
Formate
Formate umfassen halbgenaue (16 Bit), einfach, doppelt und vierfach genaue (128 Bit) Gleitkommazahlen. Ergänzt werden die Grundformate durch erweiterte (extended) und erweiterbare (neu) Formate. Ebenfalls neu aufgenommen werden Datenaustauschformate.
Dicht gepackte Dezimalformate (3 Ziffern in 10 Bit) sind geplant. Die Dezimalformate werden hauptsächlich von der Finanzwirtschaft gefordert. Hier prallen zwei gegensätzliche Standpunkte aufeinander. Auf der einen Seite werden die Speicher-, Rechenzeit- und Kosten-Vorteile, sowie die gleichmäßigere Zahlenverteilung eines dualen Formates herausgestellt. Auf der anderen Seite wird argumentiert, dass exakte Ergebnisse (meist sind Ergebnisse wie bei Handrechnungen gemeint) nur mit Dezimalarithmetik möglich sind und in Zeiten schneller Prozessoren und billiger Speicher die Nachteile nicht mehr ins Gewicht fallen. Manche Experten gehen sogar soweit, zu behaupten, dass duale Arithmetik in Zukunft kaum noch eine Rolle spielen wird. Ein zugegeben polemisches Zitat zu diesem Thema stammt vom „Gleitpunktaltmeister“ Prof. William Kahan: „Why is decimal floating-point hardware a good idea anyway? Because it can help our industry avoid errors designed not to be found.“ [1] (Warum ist dezimale Gleitkommahardware auf jeden Fall eine gute Idee? Weil sie unserer Industrie hilft die Fehler zu vermeiden, die verfahrensbedingt nicht gefunden werden können.)
Das konzipierte Dezimalformat (DFP) weicht gegenüber „klassischen BCD-Formaten“ folgendermaßen ab:
- Die Kapazität der nutzbaren Bits wird gut ausgenutzt, wenn 3 Dezimalziffern (1000 Werte) in jeweils 10 Bit (1024 mögliche Werte mit 1000 genutzten) gespeichert werden. Der Verschnitt beträgt nur 0,34 % (bei BCD-Zahlen 16,95 %)
- Die Verarbeitung der Dezimalziffern in Dreiergruppen kommt der üblichen Gruppierungsgewohnheit (23'223'456; 24 W, 24 kW, 24 MW) entgegen.
- Die Zahl 0 hat auch das Bitmuster „0000…0“.
- Die Zahlen 0 bis 9 haben in den 6 führenden Bits eine 0.
- Die Zahlen 10 bis 99 haben in den 3 führenden Bits eine 0.
- Ungerade Zahlen können mit Hilfe eines einzelnen Bits erkannt werden.
- Die 24 unbenutzten Bitmuster ddx11x111x mit dd = 01, 10 oder 11 können leicht identifiziert werden.
- Die so mit Declets gepackten Zahlen (Densely Packed) sind nicht mehr binär sortierbar, im Gegensatz zu „klassischen BCD-Formaten“.
Signaling NaNs wurden zur Streichung vorgeschlagen (3. Februar 2003), später aber wieder in den Vorschlag aufgenommen (21. Februar 2003).
(NZ: normalisierte Zahl)
-
Typ Größe Mantisse m Mant. bei NZ Exponent e emin emax Werte der Ch. bei NZ Bias b16 16 Bit 10 Bit 11 Bit 5 Bit –14 15 1 ≤ E ≤ 30 15 b32 (single) 32 Bit 23 Bit 24 Bit 8 Bit –126 127 1 ≤ E ≤ 254 127 b64 (double) 64 Bit 52 Bit 53 Bit 11 Bit –1022 1023 1 ≤ E ≤ 2046 1023 b128 128 Bit 112 Bit 113 Bit 15 Bit –16382 16383 1 ≤ E ≤ 16382 16383 d32 32 Bit 20+ Bit 7 Ziffern 6 Bit –95 96 101 d64 64 Bit 50+ Bit 16 Ziffern 8 Bit –383 384 398 d128 128 Bit 110+ Bit 34 Ziffern 12 Bit –6143 6144 6176
(20+ in Spalte 3 bedeutet die Speicherung von 6 Dezimalstellen in diesen Bits (3 Stellen in je 10 Bit) und die Speicherung der Normalisierungsziffer in zusätzlichen Bits.)
Rundungen
Zu den fünf alten IEEE 754 Rundungen kommt eine zusätzliche hinzu, so dass folgende Rundungen gefordert werden:
- vergrößernd (in Richtung +Unendlich)
- verkleinernd (in Richtung –Unendlich)
- betragsverkleinernd (in Richtung 0)
- bestmöglich und in der Mitte zur nächsten geraden Zahl (to next or to even)
- bestmöglich und in der Mitte betragsvergrößernd (to next – neu in IEEE 754r, eigentlich nur die klassische Handrechnungsrundung)
Die IEEE 754-Rundung (next even) wurde schon von Carl Friedrich Gauß vorgeschlagen und vermeidet ein statistisches Ungleichgewicht bei längeren Rechnungen zu größeren Zahlen hin.
In der Diskussion um den neuen Standard wird diese Erkenntnis offensichtlich wieder verworfen und die „Handrechnungsrundung“ (to next) wieder eingeführt.
Ausnahmen
Ausnahmebedingungen und Ausnahmebehandlung werden spezifiziert.
Neue Funktionen sind Prädikatfunktionen (größer gleich) und Operatoren für Maximum und Minimum. Hier wird vor allem über die Ergebnisse bei den Sonderwerten (NaN, Inf) diskutiert.
Dezimalarithmetik
Eine Dezimalzahl kann mehrere verschiedene Darstellungsbitmuster haben (nichteindeutige Darstellung). Die Bitmuster, die eine Zahl repräsentieren, heißen die Kohorte dieser Zahl. Die Darstellungen (s, q, c) und (s, q+1, c/10) gehören zur selben Kohorte, wenn c durch 10 teilbar ist. (Strenggenommen ist die Menge {+0, –0} in der alten IEEE 754 Norm die Kohorte der Zahl 0. Der Standard IEEE 754R sagt jedoch explizit, dass +0 und -0 in verschiedene Kohorten gehören sollen.)
Die Darstellung erfolgt in vier Bitfeldern S, G, F und J. S ist 1 Bit breit und enthält das Vorzeichen der Zahl. G enthält bei allen Dezimalformaten in 5 Bit zwei Exponentenbit und die führende Mantissenziffer. Der restliche Exponent steht in w Bit der Feldes F. Den Abschluss bilden die restlichen Mantissenziffern im Feld J mit j Declets, 10j Bit und 3j Ziffern.
S G0 G1 G2 G3 G4 F2 F3 … F[w+1] J1, J2, … Jj
G = 11111: r = NaNq oder r = NaNs; v = NaN
G = 11110: r = v = (–1)^s Infinity
G < 11110: r = (S, E–B, c); v = (–1)^s 10^(E–B) c, mit c = d0 d1 … d[p–1]
G = 110xx | G = 1110x: d0 = 8 + G4 in {8, 9}; E = G2G3 in {0, 1, 2}
G = 0xxxx | G = 10xxx: d0 = G2G3G4 in {0, 1, 2, 3, 4, 5, 6, 7}; E = G0G1 in {0, 1, 2}
Exponent: ggf...f besteht aus w Bit im Feld F plus zwei Bit im Feld G. Die zwei Bit aus Feld G können nur die drei Werte {00, 01, 10} annehmen. Damit stehen nur 3/4 der rechnerischen Exponentenwerte zur Verfügung. (Beispiel: d32, w=6, w+2 = 8, was rechnerisch 256 verschiedene Exponentenwerte bedeuten würde. Da der Exponent nie mit 11f...f beginnen darf, sind es lediglich 3/4*256=192 Werte. Unter Berücksichtigung des Bias von 101 ist der Wertebereich des Exponenten 0-101 .. 191-101 = -101 .. 90. Da bei d32 sieben dezimale Stellen in der Mantisse stehen, und man davon ausgeht, dass nach der ersten Ziffer ein Punkt steht (D0. D1 bis D6), kann dem Exponenten +6 dazugezählt werden. Somit kommt man auf die in der obigen Tabelle geschriebenen Werte -95..+96.
J besteht aus den restlichen 10j Bit oder 3j Dezimalziffern mit Werten zwischen 0 und 999, die in je 10 Bit (0…1024) Cowlishaw-codiert sind.
Alternativ können Dezimalzahlen auch binär codiert sein. Aus dem 5bittigen G-Feld werden wie bei dezimaler Codierung 2 führende Exponentenbits und 4 führende Mantissenbits extrahiert. Nach Verkettung mit den restlichen Mantissenbits aus dem J-Feld wird die gesamte Mantisse als Dualzahl interpretiert. Ist eine solche Mantisse ausnahmsweise ≥ 10^p, dann gilt sie als nichtkanonische Darstellung der Null.
Weblinks
Wikimedia Foundation.