Informatik

Gleitkommazahlen: Aufbau, Umwandlung und Fehler

Gleitkommazahlen: Aufbau, Umwandlung und Fehler
Gleitkommazahlen: Aufbau, Umwandlung und Fehler
Für Quiz, Lückentext, Lernkarten und Fortschritt ist JavaScript nötig. Alle Inhalte und Lösungen bleiben direkt lesbar.

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.

Deine Lernziele

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
Definition

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$$

Merke

Der Exponent bestimmt vor allem den Wertebereich. Die Länge der Mantisse bestimmt vor allem die Genauigkeit.

Teste dich
Frage 1 von 1LeichtWelche Aufgabe hat der Exponent einer Gleitkommazahl?
Lösung: Er bestimmt die Größenordnung und damit die Kommaposition. — Der Exponent legt fest, mit welcher Potenz der Basis die Mantisse multipliziert wird.
Wie ist binary32 aufgebaut?

Das IEEE-754-Format binary32, häufig Single Precision genannt, verwendet insgesamt 32 Bit:

BereichBitzahlAufgabe
Vorzeichen10 für positiv, 1 für negativ
Exponent8speichert die Größenordnung mit Bias
Mantissenfeld23speichert 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$$

Gut zu wissen

Der Exponent einer normalen binary32-Zahl wird mit Bias gespeichert, nicht als Zweierkomplement. Die Exponentenfelder 00000000 und 11111111 sind für Sonderfälle reserviert.

Lückentext

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 .

Lösungen: Lücke 1: 1; Lücke 2: 8; Lücke 3: 23; Lücke 4: 1. Zusammen ergeben die gespeicherten Bereiche $1+8+23=32$ Bit. Das hidden bit erhöht nur die nutzbare Genauigkeit; es belegt keinen zusätzlichen Speicherplatz.
Wie wird 23,625 als binary32 gespeichert?

Wir wandeln die Zahl vollständig um und begründen jeden Schritt.

Beispiel

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 1
  • 11 : 2 = 5 Rest 1
  • 5 : 2 = 2 Rest 1
  • 2 : 2 = 1 Rest 0
  • 1 : 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

  1. Vorzeichenbit 0: Der Wert ist positiv.
  2. Exponentenbits 10000011₂: Das ist $131$.
  3. Bias abziehen: $131-127=4$.
  4. Hidden bit ergänzen: Aus dem Mantissenfeld entsteht $1{,}0111101_2$.
  5. Mit $2^4$ multiplizieren: Das Binärkomma wandert vier Stellen nach rechts.
  6. Ergebnis: $10111{,}101_2=23{,}625_{10}$.
Teste dich
Frage 1 von 1MittelEine normale binary32-Zahl besitzt das gespeicherte Exponentenfeld 10000011. Welcher tatsächliche Exponent gehört dazu?
Lösung: 4 — Für normale binary32-Zahlen gilt $e=E-127$. Daher ist $131-127=4$.
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.

Definition

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.

Merke

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.

Beispiel

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.

Teste dich
Frage 1 von 2MittelWarum kann die Addition einer sehr kleinen Zahl zu einer sehr großen Gleitkommazahl ohne sichtbare Änderung bleiben?
Lösung: Beim Angleichen der Exponenten können die bedeutenden Bits der kleinen Zahl aus der Mantisse herausfallen. — Dieses Verhalten heißt Absorption. Es entsteht durch begrenzte Genauigkeit beim Angleichen der Exponenten.
Frage 2 von 2SchwerZwei fast gleiche, bereits gerundete Zahlen werden subtrahiert. Welches Problem ist besonders wahrscheinlich?
Lösung: Auslöschung: Gemeinsame führende Stellen verschwinden und der relative Fehler wächst. — Bei der Auslöschung bleibt ein kleines Ergebnis übrig, in dem frühere Rundungsfehler relativ stark ins Gewicht fallen.
Welche besonderen Bitmuster gibt es?

Nicht jedes Exponentenfeld beschreibt eine normale Zahl. IEEE 754 nutzt die beiden Randmuster für besondere Werte.

ExponentenbitsMantissenbitsBedeutung
nur 0nur 0positive oder negative Null
nur 0nicht nur 0subnormale Zahl nahe null
weder nur 0 noch nur 1beliebignormale Zahl
nur 1nur 0positive oder negative Unendlichkeit
nur 1nicht nur 0NaN

Das Vorzeichenbit unterscheidet bei Null und Unendlichkeit jeweils die positive und negative Variante.

Definition

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.

Teste dich
Frage 1 von 1LeichtWelches Muster kennzeichnet bei binary32 eine Unendlichkeit?
Lösung: Alle Exponentenbits sind 1 und alle Mantissenbits sind 0. — Ein Exponentenfeld aus lauter 1en steht zusammen mit einem Mantissenfeld aus lauter 0en für Unendlichkeit. Mindestens eine 1 im Mantissenfeld würde stattdessen NaN bedeuten.
Karteikasten
Karteikasten

Überlege zuerst selbst und drehe die Karte anschließend zum Prüfen um.

Alles auf einen Blick
Mindmap
  • 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
Teste dich
Frage 1 von 3LeichtWelcher Teil einer Gleitkommazahl bestimmt hauptsächlich die Genauigkeit?
Lösung: Die Mantisse — Mehr Mantissenbits erlauben mehr signifikante Binärstellen und damit feinere Näherungen.
Frage 2 von 3MittelEine normale binary32-Zahl hat den tatsächlichen Exponenten $-3$. Welcher Exponentenwert wird gespeichert?
Lösung: 124 — Es gilt $E=e+127=-3+127=124$.
Frage 3 von 3SchwerWeshalb ist $0{,}625$ binär exakt darstellbar, $0{,}1$ jedoch nicht?
Lösung: $0{,}625=\frac58$ hat nach dem Kürzen eine Zweierpotenz als Nenner; $0{,}1=\frac1{10}$ nicht. — Ein gekürzter Bruch besitzt genau dann eine endliche Binärentwicklung, wenn sein Nenner eine Zweierpotenz ist.

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.

Passend dazu