Informatik

IEEE-Gleitkomma-Zahlenformat

Kommazahlen werden im Computer anders dargestellt als ganze Zahlen. Der Grund liegt darin, dass für die Darstellung einer Zahl jeweils nur eine feste Anzahl von Bits, z.B. 32, zur Verfügung steht.

Mit 32 Bit lassen sich die ganzen Zahlen im Bereich { -231, ..., +231-1 }  =  { -2.147.483.648, ..., +2.147.483.647 } darstellen. Um eine Kommazahl darzustellen, kann man nun die Ziffern vor dem Komma und die Ziffern nach dem Komma jeweils als ganze Zahlen auf­fassen und mit jeweils 32 Bit speichern. Das Ergebnis ist eine 64 Bit lange sogenannte Festkommazahl (engl.: fixed point number).

Nachteilig ist jedoch, dass sich in 64-Bit-Festkomma-Darstellung keine betragsmäßig sehr großen oder sehr kleinen Zahlen darstellen lassen, etwa die Masse der Sonne externer Verweis oder die Masse des Elektrons externer Verweis.

Es wird daher für Kommazahlen eine andere Form der Darstellung verwendet.

Idee

Jede Zahl z lässt sich in der Form z = m · be darstellen. Hierbei sind m die Mantisse, b die Basis der Zahlendarstellung und e der Exponent. Im Dezimalsystem ist b = 10. Dies ist die "wissenschaftliche Notation", wie sie auch auf Taschenrechnern gebräuchlich ist.

Beispiel:  Die Zahl 487 lässt sich als 4,87 · 102 schreiben mit 4,87 als Mantisse, 10 als Basis und 2 als Exponent.

Die Zahl 0,000007 lässt sich als 7,0 · 10-6 schreiben.

Die Zahl -12,55 lässt sich als -1,255 · 101 schreiben.

Die Zahl 3,5 lässt sich als 3,5 · 100 schreiben.

Die Zahl 12000000 lässt sich als 1,2 · 107 schreiben.

Offenbar lässt sich 3,5 auch als 350 · 10-2 oder als 0,35 · 101 schreiben. Die Darstellung ist also nicht eindeutig, das Komma kann in der Mantisse hin und her "gleiten", wobei sich der Exponent jeweils ändert. Aus diesem Grund heißt eine in wissenschaftlicher Notation dargestellte Zahl auch Gleitkommazahl (engl.: floating point number).

Eine eindeutige Form lässt sich dadurch erreichen, dass man das Komma in der Mantisse soweit nach vorn oder hinten gleiten lässt und den Exponenten entsprechend anpasst, bis vor dem Komma genau eine Ziffer  ≠ 0 steht.

Definition:  Eine Gleitkommazahl heißt normalisiert, wenn die Mantisse vor dem Komma genau eine Ziffer  ≠ 0 enthält.

Offenbar lässt sich jede Zahl außer der Null in normalisierte Gleitkommadarstellung bringen.

Der Vorteil der Gleitkommadarstellung besteht darin, dass alle Zahlen mit derselben relativen Genauigkeit dargestellt werden, sowohl betragsmäßig sehr kleine als auch sehr große Zahlen. Wenn bei der sehr kleinen Zahl 1,23456789 · 10-12 die letzte Ziffer aufgerundet wird, entsteht ein prozentual genauso großer Fehler, wie wenn bei der sehr großen Zahl 1,23456789 · 1014 die letzte Ziffer aufgerundet wird.

Gleitkommadarstellung im IEEE-Format

Im Computer werden Zahlen zur Basis 2 dargestellt. Entsprechend ist die Basis b = 2, und die Mantisse m und der Exponent e werden als Binärzahlen dargestellt.

Im IEEE-Format (IEEE-Norm 754) ist zunächst die Anzahl der Bits festgelegt, mit denen Mantisse und Exponent jeweils dargestellt werden. Es gibt zwei Varianten: das einfach genaue Format mit insgesamt 32 Bit und das doppelt genaue Format mit insgesamt 64 Bit. Bild 1 zeigt jeweils die Auf­teilung der zur Verfügung stehenden Bits auf die Anteile Vorzeichen, Exponent und Mantisse.

 

Bild 1: IEEE-Gleitkommaformat 

Bild 1: IEEE-Gleitkommaformat

 

Vorzeichen

Die Mantisse wird in Betrag-Vorzeichen-Darstellung gespeichert. D.h. wenn die Mantisse negativ ist, ist dies daran zu erkennen, dass das Vorzeichen-Bit 1 ist. Im Mantissenfeld steht der (positive) Betrag der Mantisse.

Mantisse

Im IEEE-Format werden die Gleitkommazahlen grundsätzlich normalisiert gespeichert, wenn dies möglich ist. Nicht möglich ist dies, wenn durch das Gleiten des Kommas der Exponent so groß oder so klein wird, dass er nicht mehr mit den zur Verfügung stehenden Bits darstellbar ist. Normalisiert heißt, dass in der Mantisse vor dem Komma genau eine Ziffer  ≠  0 steht. Im Binärsystem gibt es jedoch nur eine einzige Ziffer  ≠  0, dies ist die 1. Da also jede normalisierte binäre Mantisse mit einer 1 beginnt, braucht diese 1 nicht gespeichert zu werden. Tatsächlich wird im IEEE-Format die 1 vor dem Komma nicht explizit gespeichert, sondern sozusagen implizit angenommen. Nur die Nachkommastellen der Mantisse werden gespeichert.

Exponent

Der Exponent wird in sogenannter Verschiebungs-Darstellung (engl.: biased representation) 1) gespeichert. Aus dem dargestellten Binärwert des Exponenten wird der tatsächliche Wert des Exponenten durch Subtraktion einer Verschiebedistanz ("Bias") gewonnen. Beim einfach genauen Format beträgt diese Verschiebedistanz 127.

Mit 8 Bit sind die Binärwerte {0, ..., 255} darstellbar; die Werte 00000000 = 0 und 11111111 = 255 sind reserviert; aus den verbleibenden Werten {1, ..., 254} ergibt sich nach Subtraktion der Verschiebedistanz der tatsächliche Wertebereich des Exponenten {-126, ..., 127}. Somit sind auch negative Exponenten möglich. Das folgende Diagramm zeigt den Ablauf der Umrechnung:

 

Bitfolge auswerten
langer Pfeil nach rechts
  Binärwert  127 subtrahieren
langer Pfeil nach rechts
  tat­sächlicher 
Exponent
01111101  125  -2

 

Der Vorteil der Verschiebungs-Darstellung besteht darin, dass ein Größer/Kleiner-Vergleich der Beträge zweier Gleitkommazahlen hierdurch sehr einfach möglich ist. Es müssen nur die Bitfolgen der beiden Zahlen lexikographisch miteinander verglichen werden. Diejenige Zahl, die am weitesten vorn eine 1 hat, während die andere Zahl an derselben Position eine 0 hat, ist die betragsgrößere (und damit die größere, wenn die beiden Zahlen positives Vorzeichen haben bzw. die kleinere, wenn sie negatives Vorzeichen haben). Es spielt also keine Rolle, ob die erste Abweichung zwischen den Bitfolgen im Bereich des Exponenten vorliegt (dann ist die Zahl mit dem größeren Exponenten die betragsgrößere) oder im Bereich der Mantisse (dann sind die Exponenten gleich und die Zahl mit der größeren Mantisse ist die betragsgrößere).

Voraussetzung ist allerdings, dass die Zahlen normalisiert sind, oder falls sie nicht normalisiert sind, den gleichen Exponenten haben – dies ist beim IEEE-Format der Fall.

Ohne diese dargestellte einfache Möglichkeit könnte ein Vergleich zweier Gleitkommazahlen dadurch realisiert werden, dass die Zahlen subtrahiert und das Vorzeichen des Ergebnisses ausgewertet wird. Eine Gleitkomma-Subtraktion ist aber eine relativ aufwendige Operation, insbesondere zur Zeit der Definition des IEEE-Formats, im Jahre 1985. Man wollte damals vermeiden, dass zum Sortieren von Zahlen Gleitkomma-Operationen erforderlich sind.

Der Nachteil der Verschiebungs-Darstellung des Exponenten besteht darin, dass nach einer Exponentenaddition zusätzlich noch die Verschiebedistanz subtrahiert werden muss bzw. nach einer Exponentensubtraktion addiert werden muss.

Spezialwerte

Denormalisierte Zahlen und Null

Ein Sonderfall tritt auf, wenn der Exponent nur aus Nullen besteht. Dann wird bei der Mantisse keine implizite 1 vor dem Komma angenommen, sondern eine implizite 0. Zum Ausgleich beträgt der tatsächliche Wert des Exponenten in diesem Fall nicht -127, sondern -126. Auf diese Weise lassen sich noch betragskleinere Zahlen darstellen, bis hin zur 0. Die Zahl 0 wird also dargestelt durch lauter Nullen im Exponenten und lauter Nullen in der Mantisse; das Vorzeichen kann + oder - sein. Zahlen mit lauter Nullen im Exponenten werden als denormalisierte Zahlen bezeichnet.

Unendlich

Ein weiterer Sonderfall tritt auf, wenn der Exponent nur aus Einsen besteht. Besteht die Mantisse nur aus Nullen, so ist der Wert der dargestellten Zahl +∞ oder -∞, je nach Vorzeichenbit. Das Ergebnis +∞ ergibt sich, wenn eine positive Zahl durch 0 dividiert wird, oder bei einem Exponentenüberlauf.

NaN

Besteht der Exponent nur aus Einsen und enthält die Mantisse Einsen, so ist der Wert der dargestellten Zahl NaN (not a number). Dieser Wert ergibt sich u.a. als Ergebnis einer undefinierten Rechenoperation, wie z.B. 0/0 oder ∞ – ∞.

Übersicht

Die folgende Tabelle gibt eine Übersicht über die Darstellung verschiedener 32-Bit-Gleitkommazahlen.

 v emWert
0000 0000000 0000 0000 0000 0000 0000 +0
0000 0000000 0000 0000 0000 0000 0000 -0
0111 1111000 0000 0000 0000 0000 0000 1.0·20 = 1
0111 1110100 0000 0000 0000 0000 0000 1.1·2-1 = 0,75
0111 1101100 1100 1100 1100 1100 1101 1.10011·2-2 = 0,4
1000 0000000 0000 0000 0000 0000 0000 -1.0·21 = -2
1000 0011010 0100 0000 0000 0000 0000 1.01001·24 = 1,28125·16 = 20,5
0000 0000110 0000 0000 0000 0000 0000 0.11·2-126 (denormalisierte Zahl)
1111 1111000 0000 0000 0000 0000 0000 +∞
1111 1111000 0000 0000 0000 0000 0000 -∞
1111 1111010 0110 0000 0000 0000 0100 NaN

 

Doppelt genaues Format

Das einfach genaue Format erlaubt lediglich eine Genauigkeit der Darstellung von ca. 7 Dezimalstellen. Dies ist relativ wenig; bei einer Zahl wie 12.345,678 ist die dritte Stelle nach dem Komma schon ungenau. Insbesondere bei numerischen Berechnungen mit längeren Folgen von Rechenoperationen sinkt die Genauigkeit so stark, dass das einfach genaue Format nicht ausreicht.

Daher gibt es das doppelt genaue Format. Beim doppelt genauen Format werden die Zahlen mit 64 Bit dargestellt. Die Länge des Exponenten ist 11 Bit, die Länge der Mantisse ist 52 Bit. Der Bias des Exponenten beträgt 1023. Die Genauigkeit der Darstellung entspricht ca. 16 Dezimalstellen.

Heutzutage sind Speicherplatz und Rechenleistung so reichlich vorhanden, dass nur noch das doppelt genaue Format verwendet werden sollte (Typ double in Programmiersprachen).


1)  Andere Bezeichnungen sind: Exzess-k-Darstellung (Verschiebung um den Wert k) oder Offset-Darstellung

 

Weiter mit:   [up]

 


H.W. Lang   mail@hwlang.de   Impressum   Datenschutz
Created: 14.02.2004   Updated: 12.02.2023
Diese Webseiten sind während meiner Lehrtätigkeit an der Hochschule Flensburg entstanden