IEEE 754-2008

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von IEEE 754r)
Wechseln zu: Navigation, Suche

Der Standard IEEE 754-2008, der frühere Arbeitstitel lautete IEEE 754r, ist eine notwendig gewordene Revision des 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 und im August 2008 verabschiedet.[1]

Hauptziele[Bearbeiten]

Die Hauptziele des verabschiedeten Standards konnten in

  • 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),
  • neben einfacher und doppelter auch halbe und vierfache Genauigkeit (neben 32 und 64 Bit auch 16 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 und ± sowie
  • Kosmetik (ab sofort soll „denormalisiert“ „subnormal“ heißen)

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

Formate[Bearbeiten]

Formate umfassen Gleitkommazahlen mit halber (16 Bit), einfacher (32 Bit), doppelter (64 Bit) und vierfacher (128 Bit) Genauigkeit. Das Halbformat wird auch als Minifloat bezeichnet. 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 verfügbar. 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“ William Kahan: [2]

englisch Why is decimal floating-point hardware a good idea anyway? Because it can help our industry avoid errors designed not to be found.
Übersetzung: 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. Eine solche Gruppe heißt Declet. Der Verschnitt ist im Gegensatz zu BCD-Zahlen (16,95 %) vernachlässigbar klein. Die letzte Spalte der Tabelle enthält den Informationsgehalt in Bit, der nur geringfügig geringer ist als der Speicherplatz (Bei d=7 Mantissenziffern und einem Exponentenwertebereich von emin - emax unter Berücksichtigung der Vorzeichenbits 1 + d * ln 10 / ln 2 + ln (emax-emin) / ln 2).
  • 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“. Allerdings hat 0 eine relativ große Kohorte.
  • Die Zahlen 0 bis 9 eines Declets haben in den 6 führenden Bits eine 0.
  • Die Zahlen 10 bis 99 eines Declets haben in den 3 führenden Bits eine 0.
  • Ungerade Zahlen in Declets 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“.
  • Statt Speicherung in Declets kann die Mantisse auch ganzzahlig binär in einem gleichgroßen Bitfeld gespeichert werden. Die Bitfeldaufteilung ist im Combinationfield dann anders.
  • Eine Zahl ist nicht eindeutig; mehrere Bitmuster können dieselbe Zahl bezeichnen. Die Menge der Bitmuster einer Zahl heißt Kohorte. Innerhalb einer Kohorte wurde jedoch jeweils eine kanonische Darstellung festgelegt.
  • Neben der 32/64/128-Bit-Darstellungen sind analoge Darstellungen mit einem Vielfachen von 32 Bits definiert.

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.

(NZ: normalisierte Zahl)

Typ Größe Mantisse m p Mant. bei NZ Exponent e emin emax Werte der Ch. bei NZ Bias Informationsgehalt in Bit
b16 16 Bit 10 Bit 11 Bit 5 Bit –14 15 1 ≤ E ≤ 30 15 16
b32 (single) 32 Bit 23 Bit 24 Bit 8 Bit –126 127 1 ≤ E ≤ 254 127 32
b64 (double) 64 Bit 52 Bit 53 Bit 11 Bit –1022 1023 1 ≤ E ≤ 2046 1023 64
b128 128 Bit 112 Bit 113 Bit 15 Bit –16382 16383 1 ≤ E ≤ 32766 16383 128
k = 32j, j >= 4 k Bit k - rnd (4 ld (k)) + 12 Bit k - rnd (4 ld (k)) + 13 Bit rnd (4 ld (k)) - 13 Bit 1-emax 2^(k-p-1) - 1 emax k
d32 32 Bit 20+ Bit 7 Ziffern 6 Bit –95 96 101 31,83
d64 64 Bit 50+ Bit 16 Ziffern 8 Bit –383 384 398 63,73
d128 128 Bit 110+ Bit 34 Ziffern 12 Bit –6143 6144 6176 127,53
k = 32j, j >= 1 k Bit 15 k/16 - 10 Bit 9 k/32 - 2 Ziffern k/16+4 Bit 1–emax 3 2^(k/16+3) emax + p - 2

(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[Bearbeiten]

Zu den vier 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[Bearbeiten]

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[Bearbeiten]

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 5bitigen 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[Bearbeiten]

Einzelnachweise[Bearbeiten]

  1. IEEE 754-2008: Standard for Floating-Point Arithmetic, IEEE Standards Association, 2008, doi:10.1109/IEEESTD.2008.4610935
  2. Floating-Point Arithmetic Besiegedby “Business Decisions” (PDF-Datei; 174 kB), IEEE-Sponsored ARITH 17 Symposium on Computer Arithmetic, 2007, engl.