Die Norm IEEE 754 definiert Standarddarstellungen für binäre und dezimale Gleitkommazahlen in Computern und legt genaue Verfahren für die Durchführung mathematischer Operationen, insbesondere für Rundungen, fest.
Geschichte Bis in die frühen 1970er Jahre gab es zahlreiche unterschiedliche Darstellungsformate für Gleitkommazahlen, je nach Hersteller oder Baureihe des Prozessors. Die Darstellungsformate unterschieden sich beispielsweise durch den Wertebereich der darstellbaren Zahlen, die Genauigkeit, die Unterstützung von winzigen Zahlen nahe 0, die Rundungsverfahren oder die Genauigkeit der internen Zwischenergebnisse. Diese Unterschiede führten dazu, dass Computerprogramme je nach verwendetem Computer unterschiedliche Ergebnisse lieferten.
Intel plante um 1976 für seine Mikroprozessoren eine eigene Floating Point Unit (FPU) und wollte die bestmögliche Lösung für die zu implementierende Arithmetik. Unter der Federführung der IEEE begannen 1977 Treffen, um Gleitkommaarithmetik für Mikroprozessoren zu normieren. Gleichzeitig mit der Entwicklung der Norm implementierte Intel die Normvorschläge weitgehend in dem Gleitkommaprozessor Intel 8087.
Um 1980 wurde die Anzahl der Vorschläge für die Norm auf zwei reduziert: Der K-C-S-Vorschlag (nach seinen Autoren Kahan, Coonen und Stone) setzte sich letztlich gegen die Alternative von DEC (F-Format, D-Format und G-Format) durch. Ein bedeutender Meilenstein auf dem Weg zur Norm war die Diskussion über die Behandlung des Unterlaufs, der bis dahin von den meisten Prozessoren vernachlässigt worden war.
IEEE 754-1985 Die erste Ausgabe der Norm wurde 1985 gemeinsam von ANSI und IEEE unter der Nummer IEEE 754-1985 verabschiedet."IEEE Standard for Binary Floating-Point Arithmetic," in ANSI/IEEE Std 754-1985, S. 1–20, 12. Okt. 1985, doi:10.1109/IEEESTD.1985.82928. 1989 erschien die internationale Fassung unter der Nummer IEC-60559:1989.
Die Norm definiert zwei Grunddatenformate für binäre Gleitkommazahlen mit 32 Bit (single precision) bzw. 64 Bit (double precision) Speicherbedarf und zwei erweiterte Formate.
Unabhängig von IEEE wurden die Prinzipien dieser Darstellungsformate verwendet, um weitere Darstellungsformate zu definieren, die umgangssprachlich ebenfalls als IEEE-Zahlen bezeichnet werden, obwohl sie nicht von der Norm abgedeckt sind. Einige dieser Formate wurden in späteren Ausgaben übernommen, andere wie das 80-Bit-Format des Intel 8087 blieben herstellerspezifisch.
IEEE 754-2008 Die Überarbeitung IEEE 754-2008"IEEE Standard for Floating-Point Arithmetic", in IEEE Std 754-2008, S. 1–70, 29. Aug. 2008, . strich das Wort „Binary“ aus dem Namen der Norm, so dass noch „IEEE Standard for Floating-Point Arithmetic“ übrig blieb.
Die Binärformate wurden von „single“ und „double“ in die systematischen „binary32“ und „binary64“ umbenannt und um die neuen Formate „binary16“ und „binary128“ ergänzt.
Die neuen Dezimalformate „decimal32“, „decimal64“ und „decimal128“ wurden aus der verwandten Norm IEEE 854-1987 übernommen.
Die mathematischen Grundlagen und Modellierungen wurden expliziter und präziser ausformuliert.
IEEE 754-2019 Die Überarbeitung IEEE 754-2019 wurde gegenüber 2008 nur geringfügig überarbeitet, sie enthält hauptsächlich Klarstellungen, behebt erkannte Probleme und empfiehlt zusätzliche Rechenoperationen.
Allgemeines Der numerische Wert einer Gleitkommazahl ergibt sich aus der Formel mit den 4 Bestandteilen: Vorzeichen (entweder oder ) Mantisse Basis (entweder 2 oder 10) Exponent
Um eine Gleitkommazahl bitweise zu speichern, wird sie in 3 Bitfolgen zerlegt: (1 Bit) für das Vorzeichen ( Bits) für die Mantisse ( Bits) für den Exponenten
Das Vorzeichen wird im Bit gespeichert, dabei markiert positive Zahlen und negative Zahlen.
Der Exponent wird als nichtnegative Binärzahl ( wird manchmal auch als Charakteristik oder biased exponent bezeichnet) gespeichert, indem man den festen Biaswert addiert: . Der Biaswert (engl: Verzerrung) berechnet sich durch . Der Biaswert dient dazu, dass negative Exponenten durch eine vorzeichenlose Zahl (die Charakteristik ) gespeichert werden können, unter Verzicht auf alternative Kodierungen wie z. B. das Zweierkomplement (vergleiche auch Exzesscode).
Die Mantisse ist ein Wert, der sich aus den Mantissenbits mit dem Wert als berechnet. Einfacher ausgedrückt denkt man sich an das Mantissenbitmuster links eine „1,“ angehängt: .
Dieses Verfahren ist möglich, weil durch Normalisierung (s. u.) die Bedingung für alle darstellbaren Zahlen immer eingehalten werden kann. Da dann die Mantisse immer links mit „1,“ beginnt, braucht dieses Bit nicht mehr gespeichert zu werden. Damit gewinnt man ein zusätzliches Bit Genauigkeit.
Für Sonderfälle sind zwei Exponentenwerte mit speziellen Bitmustern reserviert, der Maximalwert () und der Minimalwert (). Mit dem maximalen Exponentenwert werden die Sonderfälle NaN und ∞ kodiert. Mit Null im Exponenten werden die Gleitkommazahl 0 und alle denormalisierten Werte kodiert.
Werte außerhalb des normalen Wertebereichs (zu große bzw. zu kleine Zahlen) werden durch ∞ bzw. −∞ dargestellt. Diese Erweiterung des Wertebereichs erlaubt auch im Falle eines arithmetischen Überlaufs häufig ein sinnvolles Weiterrechnen. Neben der Zahl 0 existiert noch der Wert −0. Während das Ergebnis ∞ liefert, ergibt den Wert −∞. Bei Vergleichen wird zwischen 0 und −0 nicht unterschieden.
Die Werte NaN (für engl. „not a number“, „keine Zahl“) werden als Darstellung für undefinierte Werte verwendet. Sie treten z. B. auf als Ergebnisse von Operationen wie oder auf. NaN werden in Signal-NaN (signalling NaN, NaNs) für Ausnahmebedingungen und stille NaN (quiet NaN, NaNq) unterteilt.
Als letzter Sonderfall füllen denormalisierte Zahlen (in IEEE 754r als subnormale Zahlen bezeichnet) den Bereich zwischen der betragsmäßig kleinsten normalisierten Gleitkommazahl und Null. Sie werden als Festkommazahlen gespeichert und weisen nicht dieselbe Genauigkeit auf wie die normalisierten Zahlen. Konstruktionsbedingt haben die meisten dieser Werte den Kehrwert ∞.
Zahlenformate und andere Festlegungen des IEEE-754-Standards IEEE 754 definiert 4 Darstellungen für binäre Gleitkommazahlen, sie heißen binary16, binary32 (traditionell „single“), binary64 (traditionell „double“) und binary128. Zusätzlich erlaubt die Norm auch benutzerdefinierte erweiterte Darstellungen, die nach den gleichen Prinzipien konstruiert sind wie die vordefinierten Darstellungen.
Vor allem die Anzahl der Exponentenbits legt Maximum und Minimum der darstellbaren Zahlen fest. Die Anzahl der Mantissenbits bestimmt die relative Genauigkeit dieser Zahlen (und nur in geringem Maß das Maximum und das Minimum).
Typ Größe(1+r+p) Exponent(r) Mantisse(p) Werte desExponenten (e) Biaswert(B) binary16 16 bit 5 bit 10 bit −14 ≤ e ≤ 15 15 binary32 32 bit 8 bit 23 bit −126 ≤ e ≤ 127 127 binary32extended ≥ 43 bit ≥ 11 bit ≥ 31 bit emin ≤ −1022 emax ≥ 1023 nichtspezifiziert binary64 64 bit 11 bit 52 bit −1022 ≤ e ≤ 1023 1023 binary64extended ≥ 79 bit ≥ 15 bit ≥ 63 bit emin ≤ −16382 emax ≥ 16383 nichtspezifiziert binary128 128 bit 15 bit 112 bit −16382 ≤ e ≤ 16383 16383
Für die angegebenen Formate ergibt sich die folgende Beschränkung des jeweiligen Zahlenbereichs, die mit der Maschinengenauigkeit bemessen wird. Die betragsmäßig kleinsten Zahlen sind hierbei nicht normalisiert. Der relative Abstand zweier Gleitkommazahlen ist größer als und kleiner gleich . Konkret ist der Abstand (und in diesem Fall auch der relative Abstand) der Gleitkommazahl zur nächstgrößeren Gleitkommazahl gleich . Dezimalstellen beschreibt die Anzahl der Stellen einer Dezimalzahl, die ohne Genauigkeitsverlust gespeichert werden können. Die Mantisse ist rechnerisch durch das implizite Bit um eins größer als gespeichert.
Typ Dezimal-stellen betragsmäßig kleinste Zahl größte Zahl normalisiert denormalisiert binary32 2−(23+1)≈ 6,0 · 10−8 7 … 8 2−126≈ 1,2 · 10−38 2−23 · 2−126≈ 1,4 · 10−45 (2−2−23) · 2127≈ 3,4 · 1038 binary32 extended,minimum 2−(31+1)≈ 2,3 · 10−10 9 … 10 2−1022≈ 2,2 · 10−308 2−31 · 2−1022≈ 1,0 · 10−317 (2−2−31) · 21023≈ 1,8 · 10308 binary64 2−(52+1)≈ 1,1 · 10−16 15 … 16 2−1022≈ 2,2 · 10−308 2−52 · 2−1022≈ 4,9 · 10−324 (2−2−52) · 21023≈ 1,8 · 10308 binary64 extended,minimum 2−(63+1)≈ 5,4 · 10−20 19 … 20 2−16382≈ 3,4 · 10−4932 2−63 · 2−16382≈ 3,7 · 10−4951 (2−2−63) · 216383≈ 1,2 · 104932
mini|420px|Bitdarstellung einer binary32-Zahl in Big-Endian-Darstellung Die Anordnung der Bits einer binary32 zeigt die nebenstehende Abbildung. Die bei einer Rechenanlage konkrete Anordnung der Bits im Speicher kann von diesem Bild abweichen und hängt von der jeweiligen Bytereihenfolge (little-/big-endian) und weiteren Rechnereigenheiten ab.
Die Anordnung mit Vorzeichen – Exponent – Mantisse in genau dieser Reihenfolge bringt (innerhalb eines Vorzeichenbereiches) die dargestellten Gleitkommawerte in dieselbe Reihenfolge wie die durch dasselbe Bitmuster darstellbaren Ganzzahlwerte. Damit können für die Vergleiche von Gleitkommazahlen dieselben Operationen wie für die Vergleiche von ganzen Zahlen verwendet werden. Kurz: die Gleitkommazahlen können lexikalisch sortiert werden.
Hierbei ist jedoch zu beachten, dass für steigende negative Ganzzahlwerte der entsprechende Gleitkommawert gegen minus unendlich geht, die Sortierung also umgekehrt ist.
Interpretation des Zahlenformats Die Interpretation hängt von dem Exponenten ab. Zur Erläuterung wird mit S der Wert des Vorzeichenbits (0 oder 1), mit E der Wert des Exponenten als nichtnegative ganze Zahl zwischen 0 und Emax = 11…111 = 2r−1, mit M der Wert der Mantisse als nichtnegative Zahl und mit B der Biaswert bezeichnet. Die Zahlen r und p bezeichnen die Anzahl der Exponentenbits und Mantissenbits.
CharakteristikMantisse MBedeutungSaloppBezeichnung E = 0 M = 0 (−1)S × 0 ±0 Null (gehört zu denorm.) E = 0 M > 0 (−1)S × M / 2p × 21−B ±0,M × 21−B denormalisierte Zahl 0 < E < 2r−1 M >= 0 (−1)S × (1+M / 2p) × 2E−B ±1,M × 2E−B normalisierte Zahl E = 2r−1 M = 0 Unendlich ±∞ Unendlich E = 2r−1 M > 0 keine Zahl keine Zahl (NaN)
Null Null repräsentiert die vorzeichenbehaftete Null. Auch Zahlen, die zu klein sind, um dargestellt zu werden (Unterlauf), werden auf Null gerundet. Ihr Vorzeichen bleibt dabei erhalten. Negative kleine Zahlen werden so zu −0,0 gerundet, positive Zahlen zu +0,0. Beim direkten Vergleich werden jedoch +0,0 und −0,0 als gleich angesehen.
Normalisierte Zahl Die Mantisse besteht aus den ersten n wesentlichen Ziffern der Binärdarstellung der noch nicht normalisierten Zahl. Die erste wesentliche Ziffer ist die höchstwertige (d. h. am weitesten links stehende) Ziffer, die von 0 verschieden ist. Da eine von 0 verschiedene Ziffer im Binärsystem nur eine 1 sein kann, muss diese erste 1 nicht explizit abgespeichert werden; gemäß der Norm IEEE 754 werden nur die folgenden Ziffern gespeichert, die erste Ziffer ist eine implizite Ziffer oder ein implizites Bit (engl. ). Dadurch wird gewissermaßen 1 Bit Speicherplatz „gespart“.
Denormalisierte Zahl Ist eine Zahl zu klein, um in normalisierter Form mit dem kleinsten von Null verschiedenen Exponenten gespeichert zu werden, so wird sie als „denormalisierte Zahl“ gespeichert. Ihre Interpretation ist nicht mehr ±1,mantisse·2exponent, sondern ±0,mantisse·2de. Dabei ist de der Wert des kleinsten „normalen“ Exponenten. Damit lässt sich die Lücke zwischen der kleinsten normalisierten Zahl und Null füllen. Denormalisierte Zahlen haben jedoch eine geringere (relative) Genauigkeit als normalisierte Zahlen; die Anzahl der signifikanten Stellen in der Mantisse nimmt zur Null hin ab.