Gleitkommazahlen: Aufbau, Umwandlung und Fehler
Gleitkommazahlen speichern sehr große und sehr kleine Zahlen in einer Form ähnlich der wissenschaftlichen Schreibweise. Sie bestehen aus Vorzeichen, Mantisse und Exponent. Weil dafür nur endlich viele Bits verfügbar sind, ist der gespeicherte Wert häufig nur eine Näherung.
Hake ab, was du schon kannst — und komm am Ende hierher zurück!
Warum braucht ein Computer Gleitkommazahlen?
Wie lässt sich sowohl eine winzige Zahl als auch eine sehr große Zahl mit einer festen Anzahl von Bits darstellen? Gleitkommazahlen verschieben die Kommaposition mithilfe eines Exponenten.
Allgemein gilt:
$$w=v\cdot m\cdot b^e$$
Dabei bedeuten:
- $v$: Vorzeichen, also $+1$ oder $-1$
- $m$: Mantisse mit den signifikanten Ziffern
- $b$: Basis des Zahlensystems, im Computer meist $2$
- $e$: Exponent, der die Größenordnung bestimmt
Gleitkommazahl
Eine Gleitkommazahl stellt einen Zahlenwert durch Vorzeichen, Mantisse, Basis und Exponent dar. Das Komma hat keine feste Position: Der Exponent bestimmt, wie weit es verschoben wird.
So sind zum Beispiel die drei Schreibweisen $1{,}25\cdot10^3$, $12{,}5\cdot10^2$ und $1250$ wertgleich. Für eine eindeutige Darstellung wird die Mantisse normalisiert. Bei einer positiven Dezimalzahl steht dann genau eine von null verschiedene Ziffer vor dem Komma.
Im Binärsystem beginnt jede normale, von null verschiedene Zahl in normalisierter Form mit $1$:
$$1010{,}101_2=1{,}010101_2\cdot2^3$$
Der Exponent bestimmt vor allem den Wertebereich. Die Länge der Mantisse bestimmt vor allem die Genauigkeit.
Wie ist binary32 aufgebaut?
Das IEEE-754-Format binary32, häufig Single Precision genannt, verwendet insgesamt 32 Bit:
| Bereich | Bitzahl | Aufgabe |
|---|---|---|
| Vorzeichen | 1 | 0 für positiv, 1 für negativ |
| Exponent | 8 | speichert die Größenordnung mit Bias |
| Mantissenfeld | 23 | speichert die Bits nach der führenden 1 |
Normale Binärzahlen haben immer die Form
$$(-1)^s\cdot1{,}f_2\cdot2^e$$
$s$ ist das Vorzeichenbit. $f$ bezeichnet die 23 gespeicherten Bits des Mantissenfelds.
Warum wird die führende 1 nicht gespeichert?
Bei einer normalisierten Binärzahl ist die Ziffer vor dem Komma immer 1. Sie lässt sich beim Lesen automatisch ergänzen. Diese nicht gespeicherte Ziffer heißt hidden bit oder implizite führende 1.
Die 23 gespeicherten Mantissenbits liefern deshalb bei normalen binary32-Zahlen insgesamt 24 Bit Genauigkeit.
Wie funktioniert der Bias?
Der tatsächliche Exponent $e$ kann negativ sein. Gespeichert wird bei binary32 jedoch der verschobene Wert
$$E=e+127$$
Die Zahl $127$ heißt Bias. Beim Dekodieren wird sie wieder abgezogen:
$$e=E-127$$
Der Exponent einer normalen binary32-Zahl wird mit Bias gespeichert, nicht als Zweierkomplement. Die Exponentenfelder 00000000 und 11111111 sind für Sonderfälle reserviert.
Wähle in jeder Lücke die passende Form und prüfe anschließend deine Antworten.
Bei binary32 besteht das Format aus Vorzeichenbit, Exponentenbits und gespeicherten Mantissenbits. Für normale Zahlen ergänzt man außerdem die nicht gespeicherte führende .
Wie wird 23,625 als binary32 gespeichert?
Wir wandeln die Zahl vollständig um und begründen jeden Schritt.
1. Vorzeichen bestimmen
$23{,}625$ ist positiv. Das Vorzeichenbit lautet daher 0.
2. Ganzzahligen Anteil umwandeln
Durch Division durch $2$ entstehen folgende Reste:
23 : 2 = 11 Rest 111 : 2 = 5 Rest 15 : 2 = 2 Rest 12 : 2 = 1 Rest 01 : 2 = 0 Rest 1
Von unten nach oben gelesen ergeben die Reste 10111. Damit gilt:
$$23_{10}=10111_2$$
3. Nachkommaanteil umwandeln
Bei wiederholter Multiplikation mit $2$ wird jeweils der ganzzahlige Anteil als nächstes Bit übernommen:
- $0{,}625\cdot2=1{,}25$: Bit
1, weiter mit $0{,}25$ - $0{,}25\cdot2=0{,}5$: Bit
0, weiter mit $0{,}5$ - $0{,}5\cdot2=1{,}0$: Bit
1, Rest $0$
Also:
$$0{,}625_{10}=0{,}101_2$$
Die Kontrolle über die Stellenwerte ergibt $\frac12+\frac18=0{,}625$.
4. Zusammensetzen und normalisieren
$$23{,}625_{10}=10111{,}101_2=1{,}0111101_2\cdot2^4$$
Der tatsächliche Exponent ist somit $e=4$.
5. Exponent mit Bias speichern
$$E=4+127=131=10000011_2$$
6. Mantissenfeld bilden
Die führende 1 wird nicht gespeichert. Übrig bleibt 0111101; bis zu 23 Bits wird mit Nullen aufgefüllt. Das Mantissenfeld lautet 01111010000000000000000.
Ergebnis
Die vollständige Bitfolge lautet 0 10000011 01111010000000000000000. Die drei Bereiche sind Vorzeichen, Exponent und Mantissenfeld.
So dekodierst du die Bitfolge wieder
- Vorzeichenbit
0: Der Wert ist positiv. - Exponentenbits
10000011₂: Das ist $131$. - Bias abziehen: $131-127=4$.
- Hidden bit ergänzen: Aus dem Mantissenfeld entsteht $1{,}0111101_2$.
- Mit $2^4$ multiplizieren: Das Binärkomma wandert vier Stellen nach rechts.
- Ergebnis: $10111{,}101_2=23{,}625_{10}$.
Warum entstehen Rechenfehler?
Mit 32 Bit gibt es nur endlich viele Bitmuster, aber unendlich viele reelle Zahlen. Deshalb können nicht alle Werte exakt gespeichert werden.
Ein wichtiges Beispiel ist $0{,}1_{10}$. Als vollständig gekürzter Bruch ist dies $\frac1{10}$. Der Nenner $10=2\cdot5$ ist keine Zweierpotenz. Deshalb bricht die Binärdarstellung nicht ab:
$$0{,}1_{10}=0{,}0001100110011\ldots_2$$
Es kann nur eine begrenzte Anzahl der periodisch wiederkehrenden Bits gespeichert werden. Der Computer verwendet also einen nahe gelegenen darstellbaren Wert.
Rundungsfehler
Ein Rundungsfehler ist die Differenz zwischen dem mathematisch exakten Wert und dem Wert, der mit der verfügbaren Stellenzahl tatsächlich gespeichert oder berechnet wird.
Eine endliche Binärdarstellung ist für einen vollständig gekürzten Bruch nur möglich, wenn sein Nenner eine Zweierpotenz ist. Deshalb ist zum Beispiel $0{,}625=\frac58$ binär exakt darstellbar, $0{,}1=\frac1{10}$ dagegen nicht.
Absorption: Der kleine Wert verschwindet
Werden Zahlen sehr unterschiedlicher Größenordnung addiert, müssen ihre Exponenten zuerst angeglichen werden. Dabei können alle bedeutenden Stellen der kleineren Zahl aus der begrenzten Mantisse herausgeschoben werden. Die Addition verändert den großen Wert dann nicht mehr.
In einem vereinfachten Dezimalformat mit vier signifikanten Stellen bleibt etwa die Zahl $100$ unverändert, wenn nur $0{,}001$ addiert wird. Der Abstand ist für dieses Format zu klein.
Auslöschung: Der relative Fehler wächst
Bei der Subtraktion fast gleicher, bereits gerundeter Werte fallen ihre gemeinsamen führenden Ziffern weg. Die verbleibenden Rundungsfehler können dann einen großen Anteil am kleinen Ergebnis haben. Dies heißt Auslöschung.
Exakt gilt:
$$1{,}2345\cdot10^5-1{,}2340\cdot10^5=0{,}0005\cdot10^5$$
Werden beide Operanden mit der Rundungsregel „ab 5 aufrunden“ auf vier Mantissenziffern gerundet, entsteht:
$$1{,}235\cdot10^5-1{,}234\cdot10^5=0{,}001\cdot10^5$$
Das berechnete Ergebnis ist doppelt so groß wie das exakte Ergebnis. Die Subtraktion hat den bereits vorhandenen Rundungsfehler sichtbar verstärkt.
Durch Rundung kann sogar die Reihenfolge einer Rechnung das Ergebnis verändern. Für Gleitkommazahlen gilt daher im Allgemeinen nicht sicher
$$(x+y)+z=x+(y+z)$$
Beim Vergleich berechneter Werte ist eine exakte Bitgleichheit deshalb nicht immer angemessen. Ein möglicher Test prüft einen tolerierten Abstand:
$$|x-y|\leq\varepsilon$$
Welche Toleranz $\varepsilon$ sinnvoll ist, hängt von Größenordnung, Problem und benötigter Genauigkeit ab.
Welche besonderen Bitmuster gibt es?
Nicht jedes Exponentenfeld beschreibt eine normale Zahl. IEEE 754 nutzt die beiden Randmuster für besondere Werte.
| Exponentenbits | Mantissenbits | Bedeutung |
|---|---|---|
nur 0 | nur 0 | positive oder negative Null |
nur 0 | nicht nur 0 | subnormale Zahl nahe null |
weder nur 0 noch nur 1 | beliebig | normale Zahl |
nur 1 | nur 0 | positive oder negative Unendlichkeit |
nur 1 | nicht nur 0 | NaN |
Das Vorzeichenbit unterscheidet bei Null und Unendlichkeit jeweils die positive und negative Variante.
Subnormale Zahl
Eine subnormale Zahl stellt sehr kleine Werte nahe null dar. Bei ihr entfällt die implizite führende 1. Für binary32 wird der effektive Exponent $-126$ verwendet.
NaN bedeutet „Not a Number“. Es kennzeichnet ein Ergebnis, das keinen gewöhnlichen Zahlenwert besitzt. Ein Beispiel ist die Quadratwurzel aus einer negativen Zahl, wenn nur reelle Zahlen betrachtet werden.
Karteikasten
Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.
Alles auf einen Blick
- Gleitkommazahl
- Aufbau: Vorzeichen, Mantisse und Exponent
- binary32: 1 Bit, 8 Bit und 23 Bit
- Normalisierung: führende 1 wird zum hidden bit
- Bias: speichert auch negative Exponenten ohne Exponentenvorzeichen
- Begrenzte Mantisse: verursacht Rundung
- Fehlerfolgen: Absorption und Auslöschung
- Sonderwerte: Null, subnormal, Unendlichkeit und NaN
Abschluss-Check
Du kannst nun eine normale binary32-Zahl in ihre Speicherbereiche zerlegen und die wichtigsten Folgen begrenzter Genauigkeit erklären: Gleitkommazahlen bieten einen großen Wertebereich, speichern viele Zahlen aber nur näherungsweise.
Mit Google fortfahren