Eine einfache Möglichkeit der Darstellung von Dezimalbrüchen kennt man aus der Grundschule als Stellenwerttafel:
T | H | Z | E | z | h | |
---|---|---|---|---|---|---|
0 | 2 | 0 | 4 | 0 | 6 | 204,06 |
9 | 4 | 6 | 0 | 1 | 0 | 9460,10 |
0 | 0 | 0 | 0 | 0 | 5 | 0,05 |
Könnten wir in einer Speicherstelle eine Ziffer (0 bis 9) speichern, dann bräuchten man für jede Zahl in dieser Tabelle sechs Speicherstellen. Die Wertigkeit jeder Ziffer ergibt sich aus der Speicherstelle: Tausender (T), Hunderter (H), Zehner (Z), Einer (E), Zehntel (z) und Hunderstel (h). Dieses Verfahren nennt man Festkommazahl. Benötigt man nur Zahlen in dieser Größenordnung (z. B. Kassensystem), ist das eine praktikable Art der Speicherung. Für einen größeren Zahlenbereich bei gleichem Speicherbedarf bietet sich die Gleitkommazahl an (der Exponent bestimmt, wo das Komma am Ende steht → das Komma kann also gleiten), wie man es aus dem wissenschaftlichen Umfeld her kennt:
e | E | z | h | t | ht | ||
---|---|---|---|---|---|---|---|
2 | 2 | 0 | 4 | 0 | 6 | 2,0406 ⋅ 102 | 204,06 |
3 | 9 | 4 | 6 | 0 | 1 | 9,4601 ⋅ 103 | 9460,10 |
0 | 0 | 0 | 5 | 0 | 0 | 0,05 ⋅ 100 | 0,05 |
In diesem Fall wird eine Speicherstelle für den Exponenten (e) reserviert. Daher können wir nur noch fünf (aufeinanderfolgende) Ziffern einer Zahl speichern. Die Vereinbarung, dass auf der Einer-Stelle keine Null stehen darf, nennt man Normalisierung. Man sieht, dass die Zahl in der letzten Reihe nicht mehr normalisiert ist. Warum Normalisierung? Stellen Sie sich vor, Sie wollen wissen, wie viel 500000 Reiskörner wiegen, wenn ein Reiskorn etwa 0,00002 kg wiegt. Sie fangen vermutlich jetzt an, die Nullen zu zählen. In normalisierter Schreibung lautet die Frage: Wie viel wiegen 5 ⋅ 105 Reiskörner, wenn ein Reiskorn 2 ⋅ 10-5 kg wiegt? Antwort: 10 kg.
Frage. Warum lässt sich die letzte Zahl nicht normalisiert darstellen?
Weil wir nur die Ziffern 0 bis 9 in der Speicherstelle des Exponenten speichern können. Um 0,05 normalisiert zu schreiben, müsste man −2 als Exponent abspeichern können: 5,0 ⋅ 10−2.
Nehmen wir die gespeicherte Zahl direkt als Exponent, so können folglich keine negativen Exponenten entstehen. Wir interpretieren daher den in (e) gespeicherten Wert wie folgt:
e | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
e − 4 | −4 | −3 | −2 | −1 | 0 | 1 | 2 | 3 | 4 | 5 |
Mit der Vereinbarung, dass der Exponent der um 4 verminderte Wert aus e ist, können wir nun alle drei Zahlen normalisiert darstellen:
e | E | z | h | t | ht | ||
---|---|---|---|---|---|---|---|
6 | 2 | 0 | 4 | 0 | 6 | 2,0406 ⋅ 102 | 204,06 |
7 | 9 | 4 | 6 | 0 | 1 | 9,4601 ⋅ 103 | 9460,10 |
2 | 5 | 0 | 0 | 0 | 0 | 5,0 ⋅ 10−2 | 0,05 |
Übung. Berechnen Sie die kleinste und größte so darstellbare Zahl und vergleichen Sie diese mit den entsprechenden Zahlen bei der Festkomma-Variante! Überlegen Sie, welches Problem sich für die Null ergibt!
e | E | z | h | t | ht | ||
---|---|---|---|---|---|---|---|
0 | 1 | 0 | 0 | 0 | 0 | 1,0 ⋅ 10−4 | 0,0001 |
9 | 9 | 9 | 9 | 9 | 9 | 9,9999 ⋅ 105 | 999 990 |
e | E | z | h | t | ht | ||
---|---|---|---|---|---|---|---|
8 | 1 | 0 | 0 | 0 | 0 | 1,0 ⋅ 104 | 10 000 |
Nun wird es komplizierter, da wir unsere Zahlen im Binärsystem speichern wollen. Zusätzlich führen wir nun auch ein Vorzeichen-Bit ein. Im Tabellenkopf schreiben wir den dezimalen Wert der Speicherstelle. In eine Speicherstelle können wir aber nun nur noch 0 oder 1 speichern. Wir erweitern den Speicherplatz für eine Zahl auf acht Speicherstellen (Bits) und stellen dem Exponenten drei Bits zur Verfügung. Eine Zahl benötigt in diesem Fall also genau ein Byte zum Speichern. Da der Exponent e von 0 = 0002 bis 7 = 1112 gehen kann, ziehen wir immer 3 vom Wert ab, um den eigentlichen Exponenten zu erhalten:
VZ | Exponent e | Zahl (Mantisse) | |||||||
−1 | 4 | 2 | 1 | 1 | 0,5 | 0,25 | 0,125 | Rechnung | Dezimalzahl |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | (1 + 0,25) ⋅ 22 | 5 |
1 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | −1 ⋅ (1 + 0) ⋅ 2−2 | −0,25 |
1 | 0 | 1 | 1 | 0 | 0 | 1 | 0 | −1 ⋅ (0 + 0,25) ⋅ 20 | −0,25 |
Die letzten beiden Zeilen ergeben die gleiche Zahl. Das ist ungünstig! Warum konnte das eintreten? Weil die letzte Zeile die Vereinbarung der Normierung verletzt hat! Wenn wir aber nur normierte Zahlen zulassen und auf der Einer-Stelle außer der 1 sonst keine Ziffer stehen kann, wäre es eine Speicherverschwendung, wenn wir zwar eine Speicherstelle für die Einer haben, aber dort nie etwas anderes als die 1 stehen wird. Daher sparen wir uns das Speichern der Einer-1 und denken uns das einfach jedesmal dazu. Dadurch haben wir ein Bit mehr für die Nachkommastellen zur Verfügung, wodurch sich die Genauigkeit erhöht:
VZ | Exponent e | Zahl (Mantisse) | |||||||
−1 | 4 | 2 | 1 | 0,5 | 0,25 | 0,125 | 0,0625 | Rechnung | Dezimalzahl |
---|---|---|---|---|---|---|---|---|---|
0 | 1 | 0 | 1 | 0 | 1 | 0 | 0 | (1 + 0,25) ⋅ 22 | 5 |
1 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | −1 ⋅ (1 + 0) ⋅ 2−2 | −0,25 |
Fortsetzung folgt...