Gleitkommadarstellung / Gleitkommazahlen

Gleitkommazahlen sind gebrochene Zahlen und gehören zu den rationalen bzw. reellen Zahlen und beinhalten Zahlen mit Stellen vor und nach dem Komma. Gleitkommazahlen werden auch als Gleitpunktzahlen, Fließkommazahlen und Fließpunktzahlen bezeichnet. Im Englischen werden sie als floating point numbers bezeichnet.
Arithmetische Operationen mit Gleitkommazahlen sind erhebliche aufwendiger als mit Binärzahlen oder Zweierkomplementzahlen. Deshalb erledigt die Floating Point Unit (FPU) innerhalb eines Prozessors die Berechnungsaufgaben. Rechenwerke beherrschen die Verarbeitung von Gleitkommazahlen IEEE-754-konform. Schon seit dem 486er von Intel ist eine Gleitkomma-Einheit (Floating Point Unit, FPU) Bestandteil jedes Prozessors.

Gleitkommazahlen beinhalten Zahlen mit Stellen vor und nach dem Komma. Das Problem dabei ist, dass man nicht nur den Zahlenwert vor und nach dem Komma, sondern auch noch die Position des Kommas speichern und verarbeiten muss. Deshalb gibt es in der Informatik spezielle Datentypen für Gleitkommazahlen, die gesondert verarbeitet werden und für die die Gleitkommadarstellung gilt.

Da bei Kommazahlen festgelegte Stellen für die Vor- und Nachkommastellen eher hinderlich wären, hat man gei der Gleitkommadarstellung dafür gesorgt, dass das Komma jede beliebige Stelle einnehmen kann. Man spricht davon, dass das Komma "gleitet". Daher auch das Wort "Gleitkomma". Das bedeutet, wenn eine Zahl vor dem Komma viele Stellen hat, dann ist der Platz für die Anzahl der Stellen nach dem Komma geringer. Das gilt natürlich auch umgekehrt. Gleitkommazahlen lösen die Probleme im Hinblick auf Genauigkeit und Größe einer Zahl.

Es ist wichtig zu wissen, dass es reelle Zahlen in einem Computer eigentlich nicht gibt. Es gibt nur Ganzzahlen und gemäß IEEE 754 darstellbare Gleitkommazahlen. Die Gleitkommadarstellung hilft nur bei der Berechnung reeller Zahlen in einem Computer. Allerdings folgen Gleitkommazahlen anderen Rechenregeln, als es reelle Zahlen tun. Für Gleitkommazahlen gelten Besonderheiten, die wir bei reellen Zahlen nicht kennen und deshalb andere Rechenregeln anwenden müssen.

Festkommazahlen / Festpunktzahlen

Beim Speichern und Verarbeiten von gebrochenen Dezimalzahlen stellt sich die Frage, wie man diese Zahlen in die binäre Form bekommt. Hier gibt es die Möglichkeit, die Zahl vor und die Zahl hinter dem Komma getrennt zu behandeln und jeweils in ihre binäre Form zu bringen. In diesem Fall hat man jeweils eine feste Zahl an Stellen vor und hinter dem Komma. Das bedeutet, die Position des Kommas ist festgelegt. Deshalb spricht man dann von Festkommazahlen.

  • 9,8 7 6 5 4 3 2 1 (große Genauigkeit)
  • 9 8 7 6 5 4 3 2,1 (großer Wertebereich)
  • 9 8 7 6 5,4 3 2 1 (Mischung?)

Hier ergibt sich das Problem, dass wir entweder einen großen Wertebereich oder eine große Genauigkeit haben. Doch eigentlich wollen wir es vor dem Komma so groß wie möglich. Und hinter dem Komma so genau wie möglich.
Wenn die Position des Kommas festgelegt ist, müssen wir uns entscheiden, ob wir große Zahlen oder eine große Genauigkeit haben wollen.

Gleitkommadarstellung (Exponentialdarstellung)

Gleitkommazahlen können beides. Großer Wertebereich und große Genauigkeit. Die Lösung ist die Normalisierung und Exponentialdarstellung. Hier muss nur der Wert hinter dem Komma und der Exponent gespeichert und verarbeitet werden. Die Position des Kommas ergibt sich aus dem Exponenten.

Eine Gleitkommazahl ist die Exponentialdarstellung einer reellen Zahl. Man spricht von der Gleitkommadarstellung.

Gleitkommadarstellung

Vorzeichen (V) * Mantisse (M) * Basis (B) hoch Exponent (E)

Die Mantisse bestimmt die Genauigkeit. Je größer die Mantisse, desto genauer ist die Zahl hinter dem Komma. Der Exponent bestimmt die Größe des Wertebereichs der Zahl.

Beispielhaft die Gleitkomma-Darstellung im Taschenrechner:

1,2345E24 = 1,2345 x 10 hoch 24

Die Darstellung auf dem Taschenrechner-Display sagt aus, dass das Komma um 24 Stellen nach rechts verschoben gehört. Ein negativer Exponent sagt aus, dass das Komma nach links verschoben gehört.

Die Zahl vor dem E ist die Mantisse (M), die Zahl dahinter ist der Exponent (E) auf Basis (B) von 10. In diesem Beispiel also 10 hoch 24. Weil man mit einem Taschenrechner in der Regel auf Basis von 10 rechnet, wird die 10 im Taschenrechner nicht angezeigt. Auf die Angabe des Vorzeichens (V) "+" wurde verzichtet.

Besonderheit und Probleme bei der Gleitkommadarstellung

Ein Problem bei der Gleitkommadarstellung ist die Null ("0"). Die ist im Prinzip nicht darstellbar. Weil die Mantisse immer mit einer "verborgenen" Eins beginnt. Deshalb müssen bei einer Null alle Exponenten- und Mantissenbits "0" sein. Das Vorzeichen-Bit ist dabei unerheblich.

Sind alle Exponentenbits "0", handelt es sich um eine denormalisierte Zahl. Sie haben in der Binärdarstellung eine Null vor dem Komma. In der Mantisse stehen nur die binären Nachkommastellen. Damit ist es möglich, Zahlen darstellen zu können, die Null sind oder nahe bei der Null liegen.

Eine weitere Besonderheit ist, wenn alle Exponentenbits "1" sind und die Mantisse "0", dann würde das unendlich bedeuten. Andere Werte würden "keine Zahl" bedeuten. Im Englischen wäre das "Not a Number, kurz "NaN". Diese Zahl entsteht immer dann, wenn man versucht, nicht errechenbare Zahlen zu erhalten. Zum Beispiel die Wurzel oder den Logarithmus aus einer negativen Zahl. Oder unendlich minus unendlich. Oder Null durch Null. Dann ist das Ergebnis immer "NaN".

Ein Hauptproblem, dass bei der Gleitkommadarstellung auftritt, sind Rundungsfehler. Bringt man den Wert "0,2" in die binäre Gleitkommadarstellung und rechnet die Bitfolge anschließend wieder zurück, dann kommt der Wert "0,199951171875" heraus. Mit solchen Ungenauigkeit muss man leben, wenn man mit Gleitkommazahlen arbeitet.

Standardisierte Gleitkommazahlen nach IEEE 754 / IEC 60559

Die binäre Form einer Gleitkommazahl entspricht: Vorzeichen (V) + Exponent (E) + Mantisse (M).

Die in IEEE 754-2008 definierten Gleitkommazahlen mit 32, 64 und 128 Bit unterscheiden sich in ihrer Genauigkeit. Die Genauigkeit hängt von der Anzahl der Stellen der Mantisse ab. Die Bezeichnungen "einfache", "doppelte" und "vierfache Genauigkeit" bezieht sich nicht auf den Gleitkommatyp 32, 64 und 128 Bit, sondern die darin darstellbare Genauigkeit bei der Nachkommastelle mit 7, 16 und 34 Dezimalstellen. Die Aufteilung in Vorzeichen, Exponent und Mantisse ist im Standard festgelegt. Der Exponent wird häufig auch als Charakteristik (Char) bezeichnet.

  • Short Real / Einfache Genauigkeit / Single Precision / 32 Bit / Java-Datentyp: Float
  • 1 Bit Vorzeichen, 8 Bit Exponent (mit Bias von 127), 23 Bit Mantisse

  • Long Real / Doppelte Genauigkeit / Double Precision / 64 Bit / Java-Datentyp: Double
  • 1 Bit Vorzeichen, 11 Bit Exponent (mit Bias von 1023), 52 Bit Mantisse

Computersysteme und Programmiersprachen speichern und verarbeiten Gleitkommazahlen als "float" (einfache Genauigkeit, 32 Bit), "double" (doppelte Genauigkeit, 64 Bit) und "extended" (vierfache Genauigkeit, 128 Bit).
Außerhalb des Standards gibt es noch Minifloats mit 8 oder 16 Bit, die in speicherarmen Systemen verwendet werden.
Die Programmiersprache Java lehnt sich eng an IEEE 754 an, erfüllt die Norm aber nicht komplett.

Wertebereich von Gleitkommazahlen

Größe Mantisse Exponent minimaler Exponent maximaler Exponent signifikate Dezimalstellen kleinste normalisierte Zahl größte Zahl Wertebereich Seicherbedarf Datentyp
Binärformate
16 Bit 10 Bit 5 Bit -14 15 3 bis 4 +-6,104 x 10-5 +-65504   16 Bit
(2 Byte)
 
32 Bit 23 Bit 8 Bit -126 127 7 bis 8 +-1,175 x 10-38 +-3,403 x 1038 von - 3,40282347 x 1038
bis 3,40282347 x 1038
32 Bit
(4 Byte)
Float (Single Precision)
64 Bit 52 Bit 11 Bit -1022 1023 15 bis 16 +-2,225 x 10-308 +-1,798 x 10308 von - 1.79769313486231570 x 10308
bis 1.79769313486231570 x 10308
64 Bit
(8 Byte)
Double (Double Precision)
128 Bit 112 Bit 15 Bit -16382 16383 33 bis 34 +-3,362 x 10-4932 +-1,190 x 104932   128 Bit
(16 Byte)
 
Dezimalformate
32 Bit 21 bis 23 Bit 7,5 Bit -95 96 7 +-10-95 +-9,999999 x 1096   32 Bit
(4 Byte)
 
64 Bit 51 bis 53 Bit 9,5 Bit -383 384 16 +-10-383 +-9,99... x 10384
(15 Nachkommastellen)
  64 Bit
(8 Byte)
 
128 Bit 111 bis 113 Bit 13,5 Bit -6143 6144 34 +-10-6143 +-9,99... x 106144
(33 Nachkommastellen)
  128 Bit
(16 Byte)
 

Rechnen mit Gleitkommazahlen

Beim Rechnen mit Gleitkommazahlen gelten die Regeln der Schulmathematik nicht mehr. Das liegt an den Genauigkeitsverlusten. Der Grund ist, dass sich Dezimalzahlen nicht exakt binär darstellen lassen. Ein Beispiel: Die Zahl 0,2 hat als Binärzahl unendlich viele Stellen, von denen man aber nur eine begrenzte Anzahl speichern kann. Das bedeutet, sie müssen irgendwann gekürzt bzw. gerundet werden. Das führt dann zu Ungenauigkeiten, die mal mehr mal weniger stark ausfallen.

Beim Addieren von Gleitkommazahlen spielt zum Beispiel die Reihenfolge der Werte eine große Rolle. So ist es sinnvoll zuerst die kleinen Werte zu addieren und am Schluss die größte Zahl zu addieren.
Eine Alternative ist die Kahan-Summation, ein Algorithmus, der neben der Summe noch eine Korrekturzahl mitführt. Die Korrekturzahl nimmt Ziffern auf, die bei der eigentlichen Addition verloren gegangen sind.
Auch beim Subtrahieren entstehen Genauigkeitsverluste, wenn die beiden Zahlen sehr dicht beieinanderliegen.
Bei Berechnungen, bei denen dividiert und multipliziert wird, kommt es zu erheblichen Ungenauigkeiten. Beispiel: Eine 1 wird durch 3 geteilt. Das Ergebnis wird anschließend mit 3 multipliziert. Rein rechnerisch kommt dabei 1 heraus. Bei einer Gleitkommaberechnung aber 0,999...

Hier hilft nur mit echten Zahlen zu rechnen, die intern als Bruch mit ganzzahligen Zählern und Nennern arbeiten. Jeden Rundungsfehler kann man auch damit nicht vermeiden. Schwierigkeiten gibt es auch immer dann, wenn Ergebnisse berechnet werden, die im Allgemeinen nicht rational sind.

Die Erkenntnis ist, dass binäre Gleitkommazahlen zum Beispiel für finanzmathematische Berechnungen ungeeignet sind. Selbst dann, wenn man mit Millionen-Beträgen arbeitet, kommt es immer noch auf den Cent genau an. Und deshalb haben Programmiersprachen dafür spezielle Zahlenformate, die intern ähnlich arbeiten wie "float" oder "double", aber als Exponenten die 10 verwenden.
Denkbar wäre mit Hundertstel Cent zu rechnen, was einer Festkommazahl mit vier Nachkommastellen entsprechen würde. Hier muss man Rundungen, Konvertierungen und die Repräsentation der Zeichenfolge selber implementieren. Ein dezimales Gleitkommaformat ist da viel besser.

Umrechnen in die Gleitkommadarstellung

Der prinzipielle Ablauf besteht darin, die Werte vor und nach dem Komma in duale Zahlen umzurechnen, zusammenzusetzen, zu normalisieren, den neuen Exponenten zu ermitteln, das Vorzeichen zu bilden und anschließend die Werte Vorzeichen, Charakteristik (Exponent) und Mantisse zusammen zu setzen.

Zahlen in der Informatik

Weitere verwandte Themen:

Teilen:

Elektronik-Fibel

Elektronik-Fibel

Das will ich haben!