Informatik · Klasse 10–12 · aktualisiert
Gleitkommazahlen: Aufbau, Umwandlung und Fehler
Du lernst, wie Computer Kommazahlen speichern: Vorzeichen, Exponent, Mantisse, binary32, Rundungsfehler und die Sonderwerte Null, Unendlich und NaN.
0 von 13 Aufgaben gelöst
Kurz gesagt
Eine Gleitkommazahl besteht aus Vorzeichen, Exponent und Mantisse. Im Format binary32 sind das 1, 8 und 23 Bit, der Biaswert ist 127. Weil die Menge der darstellbaren Zahlen begrenzt ist, muss gerundet werden. Das führt zu Rundungsfehlern.
Jedes Spiel und jeder Taschenrechner rechnet mit Kommazahlen. Trotzdem lässt sich schon 0,1 im Computer nicht exakt speichern. Hier lernst du, wie Gleitkommazahlen aufgebaut sind und warum Computer manchmal überraschend rechnen.
Deine Lernziele
Hake ab, was du schon kannst. Löst du alle Aufgaben eines Abschnitts, hakt Mela das Ziel für dich ab.
4 Abschnitte
Eine Gleitkommazahl eignet sich für sehr große und für sehr kleine Zahlen. Sie besteht aus zwei Teilen: Der Exponent (die Hochzahl) gibt die Größenordnung an, das ist gleichbedeutend mit der Position des Kommas. Die Mantisse legt den Wert genauer fest. Das Komma „gleitet“, weil seine Position nicht fest ist.
Dazu kommt das Vorzeichen. Den Wert berechnet man aus Vorzeichen s, Mantisse m, Basis b und Exponent e nach der Formel s · m · b^e. Das Vorzeichen s ist entweder +1 oder −1. Im Speicher steht es in einem eigenen Bit: Das Bit 0 bedeutet positiv, das Bit 1 bedeutet negativ.
Zum Speichern wird die Zahl in drei Bitfolgen zerlegt: Vorzeichen, Exponent und Mantisse. Im Format binary32 hat der Exponent 8 Bit und die Mantisse 23 Bit. Der Exponent kann auch negativ sein. Damit man ihn trotzdem als Zahl ohne Vorzeichen speichern kann, wird ein fester Biaswert addiert. Bei binary32 ist er 127.
Bei der normalisierten Mantisse in Basis 2 ist die erste Ziffer immer eine 1. Diese führende 1 muss nicht gespeichert werden. Man nennt sie „hidden bit“ (verstecktes Bit). Die Anzahl der Exponentenbits legt vor allem Maximum und Minimum der darstellbaren Zahlen fest. Die Anzahl der Mantissenbits bestimmt die relative Genauigkeit. Bei binary32 sind das 24 Binärstellen, also etwa 7 Dezimalstellen.
Definition
Mantisse
Die Mantisse ist der Teil einer Gleitkommazahl, der den Wert genauer festlegt. Der Exponent gibt dagegen die Größenordnung an.
Beispiel: Die Zahl 123,45 als Gleitkommazahl
- 1Ziffernfolge (Mantisse): 12345
- 2Komma: 2 Stellen nach links verschieben
- 3Ergebnis: 123,45
Merke: Vorzeichenbit: 0 heißt positiv, 1 heißt negativ. Der Exponent gibt die Größenordnung an, die Mantisse den Wert genauer.
Teste dich
Das Format binary32 belegt 32 Bit, das sind 4 Byte pro Zahl. Es besteht aus 1 Bit Vorzeichen, 8 Bit Exponent und 23 Bit Mantisse. Der Biaswert berechnet sich aus der Zahl r der Exponentenbits als 2^(r−1) − 1. Mit r = 8 ergibt das 127.
Die Mantisse hat 24 Stellen. Weil die erste Stelle immer eine 1 ist, werden nur 23 Bit gespeichert, nämlich die Stellen nach der ersten 1. Liegt eine Zahl zwischen zwei Zweierpotenzen, ist der Exponent e die Hochzahl der kleineren Zweierpotenz. Der gespeicherte Exponent ist dann E = e + 127.
Das Vorgehen für eine positive Zahl: Erst bestimmst du e, dann E = e + 127 in binär. Danach teilst du die Zahl durch 2 hoch e und erhältst eine Zahl der Form 1,… Der Teil nach dem Komma wird mit 2²³ malgenommen, auf eine ganze Zahl gerundet und binär geschrieben. Zum Schluss setzt du Vorzeichen (bei positiven Zahlen 0), Exponent und Mantisse hintereinander.
Wegen des Rundens ist das Ergebnis oft nur eine Näherung. Aus den Bits für 18,4 ergibt sich zurückgerechnet 18,399 999 618 530 273 437 5, also nicht genau 18,4.
Definition
Normalisieren
Normalisieren heißt, die Zahl als 1,… mal eine Zweierpotenz zu schreiben. Gespeichert werden dann nur die Stellen nach der ersten 1.
Beispiel: 18,4 in binary32
- 1Exponent: 18,4 liegt zwischen den Zweierpotenzen 16 und 32, daher ist e = 4
- 2Gespeichert: E = 4 + 127 = 131, in binär 1000 0011
- 3Normalisiert: 18,4 : 2⁴ = 1,15
- 4Nachkommateil: 0,15 · 2²³ = 1.258.291,2, gerundet auf eine ganze Zahl
- 5Binär ergibt das die Mantisse 001 0011 0011 0011 0011 0011
- 6Verkettet: 0100 0001 1001 0011 0011 0011 0011 0011
Merke: Aufbau von binary32: 1 Bit Vorzeichen, 8 Bit Exponent mit E = e + 127, 23 Bit Mantisse ohne die führende 1.
Teste dich
Rundungsfehler haben zwei Gründe. Erstens ist die Menge der darstellbaren Zahlen begrenzt. Deshalb müssen Zwischenergebnisse nach jedem Schritt gerundet werden, damit sie ins Format passen. Dabei wird zur nächstgelegenen darstellbaren Zahl gerundet. Zweitens lässt sich schon 0,1 nicht exakt binär speichern: Jede rationale Zahl, deren gekürzter Nenner keine Zweierpotenz ist, wird im Binärsystem periodisch und bricht nicht ab. Dezimal 0,1 ist binär 0,0001100110011… Gespeichert werden nur die ersten Ziffern, dadurch entsteht Ungenauigkeit.
Wegen des Rundens gelten die aus der Bruchrechnung bekannten Rechenregeln nicht mehr. Deshalb prüft man Gleitkommazahlen nicht auf exakte Gleichheit. Man fragt stattdessen, ob sie sich im Rahmen einer Toleranz ε als gleich ansehen lassen.
Absorption: Die Addition oder Subtraktion einer betragsmäßig viel kleineren Zahl ändert die größere Zahl nicht. Der Computer bringt beide Zahlen auf den gleichen Exponenten, addiert und rundet dann wieder auf die erlaubte Stellenzahl. Die kleine Zahl verschwindet beim Runden. Deshalb hat die Gleichung 1 + x = 1 in einer vierstelligen Dezimal-Gleitkomma-Arithmetik viele Lösungen, nämlich alle Zahlen, die zu klein sind, um das Ergebnis zu verändern.
Auslöschung ist der Verlust an Genauigkeit bei der Subtraktion fast gleich großer Gleitkommazahlen. Stammen die Zahlen aus früheren Rechnungen, sind ihre hinteren Stellen durch Rundungsfehler beeinflusst. Stimmen die vorderen Stellen überein, löschen sich die gültigen Stellen zu 0 aus. Die Differenz besteht dann nur noch aus Rundungsfehlern. Beispiel: 2,346789 − 2,345678 = 0,001111. Sind nur die ersten drei Ziffern korrekt, ergibt sich mit den korrekten Ziffern 2,34 − 2,34 = 0. Im Ergebnis 0,001111 steckt dann keine einzige korrekte Ziffer mehr.
Faustregel: Stimmen zwei p-stellige, fast gleich große Zahlen in den ersten k Stellen überein, gehen im Ergebnis k der möglichen p Stellen verloren. Oft lässt sich Auslöschung vermeiden, indem man die betroffene Subtraktion durch eine Umformung der Formel vermeidet.
Definition
Auslöschung
Auslöschung ist der Verlust an Genauigkeit bei der Subtraktion fast gleich großer Gleitkommazahlen.
Beispiel: Absorption bei 100 + 0,001 (vierstellige Dezimalrechnung)
- 1Gleitkommaschreibweise: 1,000 · 10² + 1,000 · 10⁻³
- 2Gleicher Exponent und gleiche Länge: 1,00000 · 10² + 0,00001 · 10²
- 3Ziffernweise addiert: 1,00001 · 10²
- 4Auf das Format gerundet: 1,000 · 10² = 100
- 5Die Addition hat nichts an der 100 geändert
Merke: Alle drei Effekte hängen mit dem Runden zusammen. Prüfe Gleitkommazahlen deshalb nicht auf exakte Gleichheit, sondern mit einer Toleranz ε.
Teste dich
Zwei Exponentenwerte sind für Sonderfälle reserviert: der Maximalwert (alle Bits 1) und der Minimalwert (alle Bits 0). Bei binary32 sind das 1111 1111 und 0000 0000. Mit dem maximalen Exponentenwert werden NaN und Unendlich kodiert. Mit Null im Exponenten werden die Null und die denormalisierten Werte kodiert. Das sind Zahlen zwischen der kleinsten normalisierten Zahl und Null. Entscheidend ist dann die Mantisse.
Null: Exponentenbits alle 0 und Mantissenbits alle 0. Es gibt auch den Wert −0. Beim direkten Vergleich gelten +0,0 und −0,0 aber als gleich.
Unendlich: Exponentenbits alle 1 und Mantissenbits alle 0. Unendlich steht für Zahlen, deren Betrag zu groß ist, um dargestellt zu werden. Es gibt +∞ und −∞.
NaN heißt „Not a Number“, also „keine Zahl“. Die Exponentenbits sind alle 1 (wie bei Unendlich), aber die Mantissenbits sind nicht alle 0. NaN steht für ungültige (oder nicht definierte) Ergebnisse, zum Beispiel die Quadratwurzel aus einer negativen Zahl. NaN ist nicht dasselbe wie Unendlich. Das Vorzeichenbit hat bei NaN keine Bedeutung. Zwei NaN gelten immer als verschieden, selbst wenn ihre Bitmuster übereinstimmen.
Bei einem 32-Bit-NaN steht das höchste Mantissenbit a für die Art: Ist a = 1, ist es eine stille NaN. Ist a = 0 und sind die Nutzdaten ungleich Null, ist es eine anzeigende NaN.
| Exponentenbits | Mantissenbits | Bedeutung |
|---|---|---|
| alle 0 | alle 0 | Null (±0) |
| alle 1 | alle 0 | Unendlich (±∞) |
| alle 1 | nicht alle 0 | NaN (keine Zahl) |
Beispiel: Wann entsteht Unendlich, wann NaN?
- 11,0 : 0,0 ergibt nach IEEE 754 positiv Unendlich: Exponent nur Einsen, Mantisse nur Nullen
- 20,0 : 0,0 ist undefiniert und ergibt NaN: Exponent nur Einsen, Mantisse nicht nur Nullen
Merke: Erst den Exponenten, dann die Mantisse prüfen: Exponent alle 1 und Mantisse alle 0 heißt Unendlich, Mantisse nicht alle 0 heißt NaN.
Teste dich
Alles auf einen Blick
Gleitkommazahl
Aufgaben
Das Vorzeichenbit zeigt positiv (0) oder negativ (1), der Exponent die Größenordnung, die Mantisse den Wert genauer
binary32
1 Bit Vorzeichen, 8 Bit Exponent, 23 Bit Mantisse; gespeichert wird E = e + 127
Rundung
Die Menge der darstellbaren Zahlen ist begrenzt, deshalb wird nach jedem Schritt gerundet; schon 0,1 ist binär nicht abbrechend
Absorption und Auslöschung
Eine viel kleinere Zahl geht beim Addieren unter; beim Subtrahieren fast gleich großer Zahlen geht Genauigkeit verloren
Sonderwerte
Exponent alle 0 und Mantisse alle 0 ist Null; Exponent alle 1 und Mantisse alle 0 ist Unendlich; Exponent alle 1 und Mantisse nicht alle 0 ist NaN
Musteraufgabe · Schritt für Schritt
10,5 in binary32 zerlegen (erfundenes Beispiel)
- 1Aufgabe (erfundenes Beispiel): Zerlege die positive Zahl 10,5 in binary32.
- 2Exponent: 10,5 liegt zwischen den Zweierpotenzen 8 und 16, also ist e = 3.
- 3Gespeichert wird E = 3 + 127 = 130, in binär 1000 0010.
- 4Normalisieren: 10,5 : 2³ = 10,5 : 8 = 1,3125. Binär: 1,3125 = 1 + 0,25 + 0,0625 = 1,0101.
- 5Mantisse: nur die Stellen nach der ersten 1, also 0101, aufgefüllt mit Nullen auf 23 Bit: 010 1000 0000 0000 0000 0000
- 6Vorzeichen: 0, weil die Zahl positiv ist.
- 7Verkettet: 0 | 1000 0010 | 010 1000 0000 0000 0000 0000, zusammen 0100 0001 0010 1000 0000 0000 0000 0000
- 8Probe: 1,0101 binär ist 1,3125, und 1,3125 · 8 = 10,5. Die Mantisse passt in 23 Bit, Runden ist hier nicht nötig.
Fehler finden
Prüfe die Schritte bei 6,5 in binary32 In einer Zeile steckt ein Fehler. Tippe sie an.
Fehler in Zeile 3Der Biaswert fehlt: Gespeichert wird nicht e, sondern e + 127. Richtig: E = 2 + 127 = 129, in binär 1000 0001.
Lückentext
Wähl in jeder Lücke das passende Wort und prüf dann deine Antworten.
Im Format binary32 werden von der Mantisse Bit gespeichert. Bei Unendlich sind in der Mantisse alle Bits 0, und im Exponenten sind . Subtrahierst du zwei fast gleich große Zahlen, heißt der Genauigkeitsverlust .
Karteikasten
Erst selbst überlegen, dann umdrehen.
Übung mit Feedback