Zum Inhalt springen
L

Wikipedia · einfach zusammengefasst · Stand

IEEE 754

Die Norm IEEE 754 definiert Standarddarstellungen für binäre und dezimale Gleitkommazahlen in Computern und legt genaue Verfahren für die Durchführung …

Inhalt5 Abschnitte
  1. 1. Zweck und Grundaufbau
  2. 2. Formate, Wertebereich und Sonderwerte
  3. 3. Runden und vorgeschriebene Rechenoperationen
  4. 4. Beispiel mit binary32
  5. 5. Ausnahmen und Entwicklung der Norm

Zweck und Grundaufbau

IEEE 754 ist eine Norm für Gleitkommazahlen, also für die computerinterne Darstellung sehr großer, sehr kleiner und gebrochener Zahlen. Sie legt Standarddarstellungen für binäre und dezimale Gleitkommazahlen sowie genaue Regeln für mathematische Operationen, besonders für Rundungen, fest. Dadurch sollen Programme auf verschiedenen Computern vergleichbare Ergebnisse liefern.

Der Zahlenwert lautet x = s · m · b^e. Dabei ist s das Vorzeichen (+1 oder −1), m die Mantisse, b die Basis (2 oder 10) und e der Exponent. Bei der binären Speicherung bestehen die Bits aus S für das Vorzeichen, M mit p Mantissenbits und E mit r Exponentenbits. S = 0 bedeutet positiv, S = 1 negativ. Der gespeicherte Exponent ist eine vorzeichenlose Charakteristik: E = e + B, mit dem Bias B = 2^(r−1) − 1.

Für normalisierte Binärzahlen gilt m = 1 + M/2^p, auch geschrieben 1,M. Die führende 1 wird nicht gespeichert, weil sie bei einer normalisierten Binärzahl immer vorhanden ist; sie heißt implizites Bit oder hidden bit und bringt ein zusätzliches Bit Genauigkeit. Die Exponentenwerte E = 0 und E = 2^r − 1 sind für Sonderfälle reserviert.

Formate, Wertebereich und Sonderwerte

Die vordefinierten Binärformate heißen binary16, binary32, binary64 und binary128. binary32 hieß traditionell single, binary64 double. Die Zahl der Exponentenbits bestimmt hauptsächlich kleinste und größte darstellbare Werte; die Zahl der Mantissenbits bestimmt vor allem die relative Genauigkeit.

binary16 hat 16 Bit, r = 5, p = 10, −14 ≤ e ≤ 15 und Bias 15. binary32 hat 32 Bit, r = 8, p = 23, −126 ≤ e ≤ 127 und Bias 127. binary64 hat 64 Bit, r = 11, p = 52, −1022 ≤ e ≤ 1023 und Bias 1023. binary128 hat 128 Bit, r = 15, p = 112, −16382 ≤ e ≤ 16383 und Bias 16383. Erweiterte Formate sind ebenfalls erlaubt.

Bei binary32 ist ε = 2^−(23+1) ≈ 6,0 · 10^−8; es speichert 7 bis 8 Dezimalstellen. Die kleinste normalisierte positive Zahl ist 2^−126 ≈ 1,2 · 10^−38, die kleinste denormalisierte 2^−23 · 2^−126 ≈ 1,4 · 10^−45 und die größte (2 − 2^−23) · 2^127 ≈ 3,4 · 10^38. Bei binary64 gilt ε = 2^−(52+1) ≈ 1,1 · 10^−16; es speichert 15 bis 16 Dezimalstellen. Seine kleinste normalisierte Zahl ist 2^−1022 ≈ 2,2 · 10^−308, die kleinste denormalisierte 2^−52 · 2^−1022 ≈ 4,9 · 10^−324 und die größte (2 − 2^−52) · 2^1023 ≈ 1,8 · 10^308.

Die Bitmuster werden nach E und M so interpretiert: E = 0 und M = 0 bedeutet ±0; E = 0 und M > 0 eine denormalisierte Zahl; 0 < E < 2^r − 1 eine normalisierte Zahl; E = 2^r − 1 und M = 0 ±∞; derselbe Exponent mit M > 0 bedeutet NaN, „keine Zahl“. +0 und −0 sind bei direkten Vergleichen gleich, aber 1/0 ergibt +∞ und 1/(−0) −∞.

Denormalisierte oder subnormale Zahlen füllen die Lücke zwischen der kleinsten normalisierten Zahl und Null. Sie werden als ±0,M · 2^(1−B) interpretiert und haben zur Null hin immer weniger signifikante Stellen. Sie ermöglichen einen allmählichen Unterlauf: Um Null liegen 2^24 Werte für single beziehungsweise 2^53 Werte für double mit gleichem absolutem Abstand. Denormalisierte Werte können die Ausführung deutlich verlangsamen; Intel bietet seit SSE2 die nicht IEEE-754-konformen Optionen „flush to zero“ und „denormals are zero“.

NaN stellt ungültige oder undefinierte Ergebnisse dar, etwa 0/0, ∞ − ∞ oder die Quadratwurzel einer negativen Zahl. Es gibt stille NaN (NaNq) und signalisierende NaN (NaNs). Eine NaNs löst als Operand einer arithmetischen Operation eine Ausnahme aus, sofern Traps nicht deaktiviert sind; dann wird sie wie eine NaNq behandelt. Das höchste Mantissenbit ist bei NaNq 1 und bei NaNs 0. Weitere Mantissenbits dürfen Zusatzinformationen enthalten, deren Bedeutung aber plattformabhängig ist. Das Vorzeichenbit einer NaN ist nicht spezifiziert.

Runden und vorgeschriebene Rechenoperationen

Bei binären Rundungen wird zur nächstgelegenen darstellbaren Zahl gerundet. Liegt das Ergebnis genau zwischen zwei Zahlen, wird diejenige gewählt, deren niederwertigstes Mantissenbit 0 ist. Diese Regel verteilt Auf- und Abrundungen statistisch je zur Hälfte und soll eine Drift in längeren Rechnungen vermeiden. Zusätzlich müssen Rundung gegen +Unendlich, gegen −Unendlich und gegen 0 einstellbar sein. Bei binär-dezimalen Rundungen gelten geringere Qualitätsforderungen.

Eine konforme Implementierung muss Addition, Subtraktion, Multiplikation, Division und Quadratwurzel exakt gerundet ausführen: Das Ergebnis muss dem Resultat einer exakt ausgeführten Operation mit anschließender Rundung entsprechen. Außerdem ist der Divisionsrest r = x − y · n vorgeschrieben, wobei n ganzzahlig ist und |n − x/y| < 1/2 gilt; bei geradem n ist auch |n − x/y| = 1/2 erlaubt. Dieser Rest muss exakt, ohne Rundung, berechnet werden.

Konversionen zwischen allen unterstützten Gleitkommaformaten und zwischen Gleitkomma- und unterstützten ganzzahligen Formaten sind erforderlich. Bei geringerer Zielgenauigkeit wird exakt gerundet. Für jedes unterstützte Gleitkommaformat muss es außerdem eine Konversion zur exakt gerundeten ganzen Zahl im selben Gleitkommaformat geben. Auch Umwandlungen zwischen Binär- und Dezimalformaten müssen Mindestqualitätsforderungen erfüllen.

Vergleiche können neben kleiner, gleich und größer auch unordered, also „nicht eingeordnet“, liefern: Das ist der Fall, wenn mindestens ein Operand NaN ist. Zwei NaN gelten stets als verschieden, auch bei gleichem Bitmuster. Im Anhang werden unter anderem copysign(x,y), invertsign(x), scalb(y,n), logb(x), nextafter(x,y), finite(x), isnan(x), unordered(x,y) und class(x) empfohlen, aber nicht verbindlich verlangt.

Beispiel mit binary32

Für 18,4 im Format binary32 liegt der Exponent bei 4, weil 16 < 18,4 < 32. Mit Bias 127 wird E = 4 + 127 = 131 = 1000 0011₂. Nach der Normalisierung ist die Mantisse 1,15. Der Nachkommateil 0,15 wird mit 2^23 multipliziert: 1.258.291,2 wird auf eine ganze Zahl gerundet und als Mantisse 001 0011 0011 0011 0011 0011 gespeichert. Mit Vorzeichenbit 0 ergibt sich die Bitfolge 0100 0001 1001 0011 0011 0011 0011 0011.

Beim Zurückwandeln ist S = 0, E = 131 und M = 001 0011 0011 0011 0011 0011₂. Da E weder nur aus Nullen noch nur aus Einsen besteht, ist die Zahl normalisiert. Der tatsächliche Exponent ist 131 − 127 = 4. Die implizite 1 ergänzt die Mantisse zu 1001 0011 0011 0011 0011 0011₂ = 9.646.899. Nach Division durch 2^23 ist m = 1,149 999 976 158 142 089 843 75. Der gespeicherte Wert lautet daher 1 · 16 · 1,149 999 976 158 142 089 843 75 = 18,399 999 618 530 273 437 5 und ist also nicht exakt 18,4.

Ausnahmen und Entwicklung der Norm

Bei Ausnahmen werden Status-Flags gesetzt, die lesbar und schreibbar sein müssen. Sie sind „sticky“: Ein gesetztes Flag bleibt gesetzt, bis es ausdrücklich zurückgesetzt wird. So lässt sich beispielsweise 1/0, das +∞ ergibt, von einem Überlauf unterscheiden. Empfohlen sind Trap Handler, die bei einer Ausnahme aufgerufen werden können. Die fünf Ausnahmekategorien sind Überlauf, Unterlauf, Division durch Null, ungültige Operation und Ungenau; jede besitzt ein Status-Flag.

Vor der Norm verwendeten Hersteller unterschiedliche Formate, weshalb dieselben Programme auf verschiedenen Rechnern verschiedene Ergebnisse liefern konnten. IEEE begann 1977 mit der Normierung für Mikroprozessoren; der K-C-S-Vorschlag von Kahan, Coonen und Stone setzte sich gegen die DEC-Alternative durch. IEEE 754-1985 definierte binary32 und binary64 sowie zwei erweiterte Formate. IEEE 754-2008 benannte die Formate systematisch um, ergänzte binary16 und binary128 und übernahm decimal32, decimal64 und decimal128 aus IEEE 854-1987. IEEE 754-2019 enthält gegenüber 2008 hauptsächlich Klarstellungen, Fehlerbehebungen und Empfehlungen zusätzlicher Operationen.

Lernvideos zu IEEE 754

Weiterlesen

Gleitkommazahl Gleitkommazahlen bestehen aus einer festen Anzahl von Ziffern, die gemäß dem Stellenwertsystem den Wert der Zahl angeben, sowie der Angabe, um wie viele Stellen … Computer Ein Computer (englisch; deutsche Aussprache [kɔmˈpjuːtɐ]) oder Rechner ist ein Gerät, das mittels programmierbarer Rechenvorschriften Daten verarbeitet. Vorzeichen (Zahl) Eine negative Zahl wird immer mit dem Minuszeichen versehen, während einer positiven Zahl ein Pluszeichen optional vorangestellt werden kann. Die Zahl Null wird … Mantisse Es handelt sich also, im Fall der normalisierten Mantisse, um eine Zahl zwischen 0 und 1, wenn die erste Nachkommastelle ungleich 0 ist. Andernfalls kann die … Potenz (Mathematik) Eine Potenz (von lateinisch potentia ‚Vermögen, Macht') ist das Ergebnis des Potenzierens (der Exponentiation), das wie das Multiplizieren seinem Ursprung … Zweierkomplement Das Zweierkomplement kann als eine Interpretationsweise formatierter binärer Bitfolgen gesehen werden, welche für negative Werte von Integer-Variablen auftritt, … NaN Lässt man den komplexen Zahlenraum als Ergebnis zu, ergibt sich eine imaginäre Zahl, die eben nicht als reelle Zahl bzw. Gleitkommazahl darstellbar ist und … Betragsfunktion In der Mathematik ordnet die Betragsfunktion einer reellen oder komplexen Zahl ihren Abstand zur Null zu. Dieser sogenannte absolute Betrag, Absolutbetrag, … Kehrwert Daraus folgt die Rechenregel für das Dividieren durch einen Bruch: Durch einen Bruch wird dividiert, indem man mit seinem Kehrwert multipliziert. Siehe auch … Einfache Genauigkeit In der Mathematik und Informatik ist einfache Genauigkeit (englisch single precision oder auch nur single) eine Bezeichnung für ein Gleitkommaformat, … Doppelte Genauigkeit Doppelte Genauigkeit (englisch double precision oder auch double) steht in der Computerarithmetik für ein Gleitkomma-Zahlenformat, bei dem eine Zahl 8 Byte … Quadratwurzel Hierbei handelt es sich um einen Algorithmus ähnlich dem gängigen Verfahren der schriftlichen Division. Intervallschachtelung: Dieses Verfahren ist recht …