IEEE 754-2008

Der Standard IEEE 754-2008, der frühere Arbeitstitel lautete IEEE 754r, ist eine Überarbeitung des erstmals 1985 von dem ANSI und IEEE gemeinsam verabschiedeten Gleitkommastandards IEEE 754 für Standarddarstellungen binärer und dezimaler Gleitkommazahlen. Der originale Standard und seine internationale Fassung (IEC-60559:1989) waren sehr erfolgreich und wurden in zahlreiche Prozessoren und Programmiersprachen übernommen. Die Diskussion über die 2008er-Ausgabe begann im Jahr 2001; im Juni 2008 wurde der Standard angenommen und im August 2008 verabschiedet. Die nochmals überarbeitete Ausgabe des Standards, IEEE 754-2019, hat sich gegenüber 2008 nur geringfügig geändert – sie enthält hauptsächlich Klarstellungen, behebt erkannte Probleme und empfiehlt zusätzliche Rechenoperationen.

Hauptziele

Die Hauptziele des verabschiedeten Standards können aufgeteilt werden in

Der Standard soll Formate und Methoden für Gleitkommaarithmetik sowie eine Mindestqualität definieren.

Formate

Formate umfassen Gleitkommazahlen mit halber (16 Bit), einfacher (32 Bit), doppelter (64 Bit) sowie vierfacher (128 Bit) Genauigkeit. Das Halbformat stellt ein standardisiertes Minifloat dar. Ergänzt werden die Grundformate durch erweiterte (extended) und erweiterbare (neu!) Langzahl-Formate. Ebenfalls neu aufgenommen wurden Datenaustauschformate. Neben der 16/32/64/128-Bit-Darstellungen sind Darstellungen mit einem Vielfachen von 32 Bit definiert.

Dicht gepackte Dezimalformate (DPD, 3 Ziffern in 10 Bit) sind ebenfalls dazugekommen. Sie weichen von klassischen einzelzifferbasierten BCD-Formaten folgendermaßen ab:

Signaling NaNs wurden zur Streichung vorgeschlagen (3. Februar 2003), später aber wieder in den Vorschlag aufgenommen (21. Februar 2003). Eine Signaling NaN ist eine NaN mit gesetztem Bit 7. Darstellungen von existieren und sind leicht erkennbar.

Typ Spei-
cher-
bedarf
Mantisse Exponent Infor-
mations-
gehalt
in Bit
Bits m effektive Bits einer normali­sier­ten Zahl p Bits e Wertebereich Werte der Ko­horte einer nor­ma­li­sier­ten Zahl
emin emax Bias
b16 (half)16 Bit10115−1415151 ≤ E ≤ 3016
b32 (single)32 Bit23248−1261271271 ≤ E ≤ 25432
b64 (double)64 Bit525311−1.0221.0231.0231 ≤ E ≤ 2.04664
b128 (quadruple)128 Bit11211315−16.38216.38316.3831 ≤ E ≤ 32.766128
b256 (octuple)256 Bit23623719−262.142262.143262.1431 ≤ E ≤ 524.286256
k = 32j
mit j ≥ 4
k Bitk + 12 −
rnd(4·ld k)
k + 13 −
rnd(4·ld k)
rnd(4·ld k)
− 13
1 − emax2k−p−1 − 1emax1 ≤ E ≤ 2·emaxk
d3232 Bit (a)20+57 Ziffern6−959610131,83
d6464 Bit50+516 Ziffern8−38338439863,73
d128128 Bit110+534 Ziffern12−6.1436.1446.176127,53
d32k mit k ≥ 132k Bit30k−10+59k − 2 Ziffern2k + 41 − emax3·22k+3emax+p−231,9k−0,07
(a) 
20+5 (in Spalte 3) bedeutet:
  • in den 20 Bits werden 6 Dezimalstellen der Mantisse gespeichert (3 Stellen in jeweils 10 Bit)
  • in den 5 übrigen Bits wird gespeichert:
    • eine weitere Dezimalstelle der Mantisse (ergibt 10 Möglichkeiten)
    • der Rest des Exponents bei Division durch 3 (der Quotient selbst wird in den Bits e gespeichert) (ergibt 30 Möglichkeiten)
    • Signalisierungen für ±NANs und ±INFs (ergibt 32 Möglichkeiten)

Rundungen

Zu den vier alten IEEE-754-Rundungen kommt eine zusätzliche hinzu, so dass folgende Rundungen gefordert werden:

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.

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.

Dezimalkodierungen

Speicherplatzbedarf
DPD Größe für äquivalente Packed BCD Gewinn
32 Bit 7×4 + 7,58 + 1 Bit = 36,58 Bit+4,48 Bit
64 Bit 16×4 + 9,58 + 1 Bit = 74,58 Bit+10,48 Bit
128 Bit 34×4 + 13,58 + 1 Bit = 150,58 Bit+22,48 Bit

Die primäre Idee hinter der dicht gepackten Dezimaldarstellung ist, dass diese mit extrem wenig (Gatter-)Aufwand in eine klassische BCD-Darstellung für die Mantisse sowie einen binären Exponenten umkodiert werden kann, aber gleichzeitig den Speicherplatz so effizient wie möglich ausnutzt. Die eigentliche Verarbeitung findet dann im klassischen BCD-Format statt, nur beim Lesen und Schreiben von Registern ist eine Umkodierung erforderlich.

Die Kodierung von 32-Bit-, 64-Bit- und 128-Bit-dezimalkodierten Zahlen erfolgt nach folgendem Schema. Für längere Dezimalkodierungen werden für jedes weitere 32-Bit-Wort dem Exponenten 2 Bit und der Mantisse 30 Bit (3× 10 Bit) zugeschlagen, so dass unter Beibehaltung des 5-Bit-Kombinationsfeldes der Wertebereich des Exponenten sich vervierfacht und die Mantisse weitere neun Ziffern erhält.

FormatVorzeichenKombinationsfeldrestl. Exponentrestliche Mantisse
32 Bit 1 Bit5 Bits6 Bits20 Bits
sm m m m mxxxxxxbbbbbbbbbb bbbbbbbbbb
64 Bit 1 Bit5 Bits8 Bits50 Bits
sm m m m mxxxxxxxxbbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
128 Bit 1 Bit5 Bits12 Bits110 Bits
sm m m m mxxxxxxxxxxxxbbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb bbbbbbbbbb
bbbbbbbbbb
0: positiv
1: negativ
Kodierung der MSBs
nach Tabelle 1
binäre
Kodierung
Jedes Declet ist nach Tabelle 2 kodiert und liefert drei weitere Ziffern.
Vorzeichen Ziffer 1 Expon. MSB Expon. LSB Ziffer 2Ziffer 3Ziffer 4 Ziffer 5Ziffer 6Ziffer 7 Ziffer 8Ziffer 9...

Die Zahl besteht aus

Zur Dekodierung und Kodierung werden folgende Kodiertabellen benötigt:

Tabelle 1: Kodierregeln für das Kombinationsfeld der MSBs des Exponenten und der Mantisse
Kombinationsfeld MSBs des Kod.
Wert
Beschreibung
m4m3m2m1m0Exp.Mant.
00abc000abc(0-7)Ziffer bis 7
01abc010abc
10abc100abc
1100c00100c(8-9)Ziffer größer 7
1101c01100c
1110c10100c
11110±Infinity
11111NaN
Hinweis
Das Vorzeichenbit von NaNs wird ignoriert. Das MSB des restlichen Exponenten bestimmt, ob das NAN quiet oder signaling ist.
Tabelle 2: Kodierregeln für die Declets der dichtgepackten dezimalen Ziffern der restlichen Mantisse
DPD kodierter Wert Dezimalziffern
b9b8b7b6b5 b4b3b2b1b0 d2d1d0 Kodierter Wert Beschreibung
abcdef0ghi0abc0def0ghi(0–7) (0–7) (0–7)drei Ziffern bis 7
abcdef100i0abc0def100i(0–7) (0–7) (8–9)zwei Ziffern bis 7,
eine größer 7
abcghf101i0abc100f0ghi(0–7) (8–9) (0–7)
ghcdef110i100c0def0ghi(8–9) (0–7) (0–7)
ghc00f111i100c100f0ghi(8–9) (8–9) (0–7)eine Ziffer bis 7,
zwei Ziffern größer 7
dec01f111i100c0def100i(8–9) (0–7) (8–9)
abc10f111i0abc100f100i(0–7) (8–9) (8–9)
??c11f111i100c100f100i(8–9) (8–9) (8–9)drei Ziffern größer 7
Hinweis
Da im Gegensatz zur Binärdarstellung (in der durch Normalisierung und Weglassen des MSBs eine Normalisierung erzwungen wird), keine Normalisierung erzwungen wird und die Ziffer 0 als höchstwertige Ziffer verfügbar ist, sind Zahlen nicht eindeutig kodierbar.

Dezimale Gleitkommazahlen in der Praxis

Die Probleme von dezimalen Gleitkommazahlen sind unter anderem:

Die Ergebnisse sind:

Sinnvoll sind sie:

Hier prallen zwei gegensätzliche Standpunkte aufeinander.

William Kahan hat behauptet, dass duale Arithmetik in Zukunft kaum noch eine Rolle spielen wird.

“Why is decimal floating-point hardware a good idea anyway? Because it can help our industry avoid errors designed not to be found.”

„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.“

– William Kahan: Floating-Point Arithmetic Besieged by “Business Decisions”

Er übersieht dabei aber, dass

Einzelnachweise

  1. ↑ IEEE 754-2008: Standard for Floating-Point Arithmetic. IEEE Standards Association, 2008, doi:10.1109/IEEESTD.2008.4610935.
  2. ↑ IEEE Standard for Floating-Point Arithmetic. In: IEEE Std 754-2019 (Revision of IEEE 754-2008). Juli 2019, S. 1–84, doi:10.1109/IEEESTD.2019.8766229 (ieee.org [abgerufen am 30. Dezember 2023]).
  3. ↑ Michael F. Cowlishaw: A Summary of Densely Packed Decimal encoding. IBM, 13. Februar 2007, archiviert vom Original am 24. September 2015; abgerufen am 7. Februar 2016 (englisch).
  4. ↑ William Kahan: Floating-Point Arithmetic Besieged by “Business Decisions”. (PDF; 174 kB) IEEE-Sponsored ARITH 17 Symposium on Computer Arithmetic, 5. Juli 2005, S. 6 von 28, abgerufen am 19. Februar 2020 (englisch).