23/2 | = 11, Rest: 1 |
11/2 | = 5, Rest: 1 |
5/2 | = 2, Rest: 1 |
2/2 | = 1, Rest: 0 |
1/2 | = 0, Rest: 1 |
Für den Nachkommateil muss man sich ein klein wenig mehr Mühe geben, aber das ist auch nicht sehr schwierig. Statt durch 2 zu teilen, multiplizieren wir einfach mit 2 und schauen, ob das Ergebnis größer als 1 ist; wenn ja, steht an der entsprechenden Stelle (diesmal in der “normalen” Reihenfolge von links nach rechts) eine 1 und man fährt mit der um 1 reduzierten Zahl fort, ansonsten steht eine 0 und es geht direkt weiter. Die Rechnung selber ist aber weitaus anschaulicher als eine Erklärung, daher hier die Tabelle:
0.625*2 | = 1.25, Bit: 1 |
0.25*2 | = 0.5, Bit: 0 |
0.5*2 | = 1.0, Bit: 1 |
0.0*2 | = 0.0, Bit: 0 |
… |
Insgesamt ergibt sich also die Festkommazahl 10111.10100000… als Repräsentation der 23.625; zur Kontrolle:
101112 = 1*24 + 0*23 + 1*22 + 1*21 + 1*20 = 16 + 4 + 2 + 1 = 23
und
101.2 = 1*2-1 + 0*2-2 + 1*2-3 = 0.5 + 0.125 = 0.625.
Zur Normalisierung muss das Komma in dieser Zahl nun um 4 Stellen nach links verschoben werden; das entspricht einer Multiplikation mit 24, ganz so wie im Dezimalsystem. Für die normalisierte Darstellung erhalten wir also: 1.011110100000 * 24. Die Mantisse ist also 101111012 und der Exponent 410 = 1002. Nun muss noch der Bias auf den Exponenten addiert werden; bei 32-Bit-Zahlen ist das in der Regel 127, also erhalten wir für den Exponenten 13110 = 100000112. Setzen wir alle gesammelten Zahlen zusammen (wir erinnern uns: die führende 1 der Mantisse kann ignoriert werden), ergibt sich demzufolge:
23.62510 = 0 10000011 011110100000000000000002
So schwer ist es also gar nicht. Gleitkommazahlen haben gegenüber Festkommazahlen den großen Vorteil, dass auch sehr große und sehr kleine Zahlen dargestellt werden können, indem der Exponent sehr groß beziehungsweise sehr klein wird. Ganz unproblematisch ist das allerdings nicht: je größer der Exponent ist, desto weniger Bits stehen zur Verfügung, um die niederwertigen Ziffern der Zahl darzustellen. Hat der Exponent zum Beispiel den Wert 23, so muss das (gedachte) Komma der gespeicherten Mantisse um 23 Stellen nach rechts geschoben werden – die dadurch entstehende Festkommazahl hat dementsprechend gar keine Nachkommastellen mehr. Je größer der Exponent wird, desto mehr niederwertige Stellen der Zahl gehen demzufolge verloren. Und genau hier liegt das eigentliche Problem der Gleitkommazahlen; mit steigender Größe der Zahlen (im positiven wie im negativen Bereich) werden auch die Lücken zwischen den darstellbaren Zahlen immer größer. Die Wikipedia bietet hierfür eine schöne Abbildung; gezeigt sind die darstellbaren Zahlen für verschiedene Mantissenlängen. Jeder Kreis markiert eine Zahl, die als Gleitkommazahl nach dem vorgestellten Schema dargestellt werden kann. Es ist leicht zu sehen, dass insbesondere bei kurzer Mantissenlänge die Abstände zwischen den Zahlen immer größer werden (bei größerer Mantissenlänge verschiebt sich das Problem einfach in höhere Wertebereiche).
Kommentare (12)