Im Begriff Gleitkommazahl steckt schon das Wort "Komma". Gleitkommazahlen sind der heute übliche Weg, um Kommazahlen, also reelle Zahlen, für den Computer darzustellen. Das Wort entstammt der wörtlichen Übersetzung vom englischen "floatingpoint". Es gibt eine Vielzahl von Begriffen, die alle das selbe bedeuten: Fließkommazahl, Gleitkommazahl, Fließpunktzahl, Gleitpunktzahl.
Reelle Zahlen sind Zahlen, die Nachkommastellen haben. Manche
dieser Zahlen sind vollkommen unproblematisch. Zum Beispiel 3,5.
Diese Zahl entsteht beispielsweise, wenn man 7 durch 2 teilt.
Schwieriger sind jedoch Zahlen die kein Ende haben, also unendlich
viele Nachkommstellen. Hierzu zählt zum Beispiel das Ergebnis aus
10 geteilt durch 3. Es ist 3,33333...
Ein Computer kann jedoch nicht problemlos eine unendliche Zahl
anzeigen, bzw. berechnen. Das würde ja bedeuten, dass er unendlich
lang diese Zahl ausdrucken müsste oder er unendlich viel Speicher
besitzen müsste.
Aus diesem Grund beschränkt man sich auf eine bestimmte Anzahl an Nachkommastellen. Nehmen wir beispielsweise 10 Euro. Wenn man die durch drei teilen würde, würde jeder 3,33 Euro bekommen. Es bleibt dann jedoch ein Cent übrig. Wir geben uns also auch im realen Leben mit einer guten Näherung zufrieden.
Meistens stören Näherungen nicht. Problematisch wird es jedoch,
wenn durch die Näherungen Folgefehler entstehen. Ein Beispiel ist
wieder 10 geteilt durch 3.
Mathematisch richtig ist: 10/3*3=10
Ich teile eine Zahl durch drei und multipliziere das Ergebnis
wieder mit drei. Es muss also wieder 10 herauskommen. Wenn ich mich
jetzt jedoch auf die Näherung verlasse, komme ich zu einem falschen
Ergebnis. Nehmen wir an, wir hätten nur 4 Nachkommastellen zur
Verfügung. Also gilt:
10/3=3,3333
Wenn ich 3,3333 mit drei multipliziere kommt als Ergbenis 9,9999
heraus. Also stimmt meine Gleichung nicht mehr, da 10 ja nicht
gleich 9,9999 ist.
Das mag jetzt vielleicht ein wenig spitzfindig klingen, ein
Computer nimmt bekanntlicher Weise jedoch alles sehr genau.
Jede Zahl besteht aus einem Vorzeichen, einem Teil vor dem Komma und den
Zahlen nach dem Komma.
Nehmen wir nochmal die Zahl 3,5. Wir teilen sie
auf in:
Vorzeichen: +
Vorkommastelle: 3
Nachkommastelle:
5
Nehmen wir jetzt die Zahl -5432578865,7890763257556.
Vorzeichen:
-
Vorkommastelle: 5432578865
Nachkommastelle: 7890763257556
Warum
habe ich mir jetzt diese "seltsame" Zahl ausgesucht? Ich habe weiter oben schon
von Näherungen gesprochen. Ist es bei einer so großen Zahl wichtig, die exakte
Nachkommastelle zu kennen? Wahrscheinlich nicht. Wenn mich jemand nach der Zahl
fragen würde, würde ich antworten: das sind ca. -5,4 Millarden.
-5,4 Milliarden bedeutet als Zahl -5400000000. Dies kann ich auch als
-5,4*1000000000 schreiben. Dies kann ich nochmals anders schreiben als
-5,4*109.
Wenn ich jetzt eine bessere Näherung brauche, dann
kann ich einfach noch ein paar Nachkommastellen hinzufügen.
-5,432*109 beschreibt die Zahl schon ziemlich gut.
Jede reelle Zahl kann man in der Exponentialschreibweise
darstellen. Ein Absatz weiter oben haben wir das schon mit der Zahl
-5,4 Milliarden gemacht.
Allgemein kann man sagen: Eine Zahl kann man darstellen als
Mantisse * Basis hoch Exponent.
Das bedeutet: -5400000000 = -5,4*109
Die Mantisse ist die Kommazahl, die mit der Basis hoch dem
Exponenten multipliziert wird. Diese Kommazahl ist jedoch erstmal
nicht auf eine bestimmte Form festgelegt. Alle untenstehenden
Zahlen haben den selben Wert:
-5,4*109
= -54,0*108
= -0,54*1010
Eine gut gewählte Mantisse erspart einem beispielsweise bei sehr
großen Zahlen viel Schreibarbeit.
76459000000000000000000 = 7,6459*1022
Ausserdem bestimmt die Mantisse die Genauigkeit der Zahl. Je mehr
Stellen ich bei der Mantisse hinzufüge, desto genauer wird die
Zahl.
Als Basis wählt man immer die dem jeweiligen Zahlensystem
zugrundeliegende Basis. Im Dezimalsystem ist es eben die 10, im
Oktalsystem die 8, im Hexadezimalsystem die 16 und im Dualsystem
entsprechend die 2.
Wichtig ist hierbei, dass die Basis für das jeweilige System klar
bestimmt sein muss. Wenn das der Fall ist, kann ich die Basis auch
"weglassen". Man erstetzt die Basis dann einfach durch ein E. Die
beiden Beispielzahlen schreiben sich dann so:
-5,4*109 = -5,4E9
7,6459*1022 = 7,6459E22
Achtung: Lassen Sie die Basis nur dann weg, wenn wirklich klar ist,
auf welcher Basis das Zahlensystem aufgebaut ist.
Der Exponent ist nichts anderes als eine beliebige Potenz der
Basis. Man unterscheidet zwischen positiven und negativen
Exponenten. Bei positiven Exponenten wird die Basis mit sich selbst
mulitpliziert, bei negativen Exponenten wird (1/Basis) mit sich
selbst multipliziert. Klingt kompliziert? Ist es eigentlich nicht.
Beispiel:
103 = 10*10*10 = 1000
105 = 10*10*10*10*10 = 100000
10-3 = 1/10 * 1/10 * 1/10 = 0,001
10-5 = 1/10 * 1/10 * 1/10 * 1/10 * 1/10 = 0,00001
Zahlen in der Exponentialschreibweise kann man normalisieren.
Normalisierung bedeutet, dass keine Null vor dem Komma stehen
darf.
Diese Darstellung hat den Vorteil, dass normalisierte Zahlen immer
in der gleichen Form vorliegen und so eine bessere Vergleichbarkeit
liefern.
Das IEEE-Format interpretiert eine bestimmte Anzahl von Bits als
Dezimalzahl. Es gibt hier eine kleinere Variante mit 32 Bit und
eine größere Variante mit 64 Bit.
Im 32 Bit Short-Format werden die Bits 0 bis 22 als Mantisse
interpretiert, die Bits 23 bis 30 als Exponent und das Bit 31 als
Vorzeichen.
Im 64 Bit Long-Format werden die Bits 0 bis 51 als Mantisse
interpretiert, die Bits 52 bis 62 als Exponent und das Bit 63 als
Vorzeichen.
Beispiel für das 32 Bit Short-Format:
01101101001100101010010101011101
wird zu
0 11011010 01100101010010101011101
Vorzeichen Exponent Mantisse
Das Vorzeichen 0 bedeutet dabei positiv, das Vorzeichen 1 bedeutet
dabei negativ.
Der Exponent hat 8 Bit, er wird auf Basis des Zweierkomplementes
mit einem Wertebereich von -128 bis +127 interpretiert.
Die Mantisse ist wird als positive Ganzzahl gewertet.
Der Nachteil an der Darstellung laut IEEE ist die Tatsache, dass nun der Exponent eine positive oder eine negative Zahl sein kann, je nachdem ob wir sehr kleine oder sehr große Zahlen verwenden. Dies kann man dadurch umgehen, dass man gedanklich einen festen Betrag hinzu addiert. Anstatt einen Exponenten von -127 bis +128 zuzulassen, wird einfach mit dem Wertebereich 0 bis +255 gearbeitet und dann nachträglich um den Bias wieder korrigiert.
Was hat das denn für einen Sinn? Ganz einfach: bei der Umsetzung der Rechenarithmetik mit Vorzeichen in Schaltkreise und Elektronik muss ein größerer Aufwand betrieben werden. Aus diesem Grund wird mit dem "Trick" des Bias gearbeitet, so bleiben die Schaltungen einfacher. Der Bias bei Variablen mit dem Wertebereich Single ist B=127 und bei Double ist er B=1023.
Beispiel:
Dezimal: 172645455
Normalisiert: 1,72645455*108
Darstellung mit Bias B=127: 1,72645455*10(8+127) = 1,72645455*10135