Wie rechnet denn ein Computer mit Gleitkommazahlen?
Bevor richtig los gelegt werden kann, ist es noch wichtig einen Fachbegriff aus der Mathematik und Informatik, die Mantisse zu verstehen.
Definition:
Die Mantisse (auch Signifikand genannt) ist der Teil einer Gleitkommazahl, der die signifikanten Stellen der Zahl enthält – also die tatsächlichen Ziffern ohne die Exponentialskalierung. Beispiel: Die Zahl \( 3,1415 * 10^2 \) hat:
- Mantisse: 3,14153
- Exponent: 2
- Basis: 10
Im binären System (z. B. in der Informatik nach IEEE-754): Eine Gleitkommazahl wie \( 1,101 * 2^3\) hat:
- Mantisse: 1,1011
- Exponent: 3
- Basis: 2
Wichtig:
- Die Mantisse gibt die Genauigkeit der Zahl an.
- Der Exponent verschiebt das Komma (Skalierung).
- Die Basis ist meist 10 (Dezimalsystem) oder 2 (Binärsystem).
Wie arbeitet die binäre Gleitkomma Arithmetik?
Die binäre Gleitkomma-Arithmetik ist ein Verfahren zur Darstellung und Berechnung von nicht-ganzzahligen Zahlen (z. B. Dezimalzahlen) im Binärsystem, wie es in Computern verwendet wird. Sie folgt meistens dem IEEE 754-Standard, der festlegt, wie solche Zahlen im Speicher repräsentiert und wie mit ihnen gerechnet wird.
Grundidee
Eine Gleitkommazahl wird wie folgt dargestellt
\(Wert = (-1)^s * 1.Mantisse *2^{Exponent} \)
- s: Vorzeichenbit (0 = positiv, 1 = negativ)
- Mantisse (auch Signifikand): Binärbruch mit führender 1 (normalisiert
- Exponent: Skaliert die Zahl durch eine Zweierpotenz (wird mit einem Bias gespeichert)
Aufbau im IEEE 754 Standard (z. B. 32-bit „Single Precision“)
Teil | Länge | Bedeutung |
Vorzeichen | 1 Bit | 0 = +, 1 = - |
Exponent | 8 Bit | Exponent + Bias (127) |
Mantisse | 23 Bit | Signifikante Stellen |
Beispiel:
Die Gleitkommazahl -6.75 wird so gespeichert:
- Binär: -6,75 = -110,11 = -1,1011 * 2²
- Vorzeichen: 1
- Exponent: 2 → 2 + 127 = 129 → binär 10000001bin
- Mantisse: Nach dem führenden 1. die restlichen Bits: 101100.....bin
Rechenregeln bei Arithmetik
Addition/Subtraktion:
- Exponenten angleichen (kleinere Zahl wird verschoben)
- Mantissen addieren oder subtrahieren
- Ergebnis normalisieren
- Runden
- Überlauf/Unterlauf behandeln
Multiplikation:
- Mantissen multiplizieren
- Exponenten addieren
- Vorzeichen berechnen
- Normalisieren & runden
Beispiel: 1.5+2.25
- Binär:
- \(1,5 = 1.1 = 1.1 * 2^0\)
- \(2,25 = 10.01 = 1.001 *2^1 \)
- Exponenten angleichen:
- \(1,5 = 1.1 = 1.1 * 2^0 = 0.11 *2^1\)
- Jetzt sind beide Exponenten 1
- Beide Mantissen addieren:
- \(0.11 + 1.001 = 1.111\)
- Ergebnis:
- \(1.111 * 2^1 = 11.11 = 3,75 \)
Typische Probleme
- Rundungsfehler: Nicht alle Dezimalzahlen lassen sich exakt binär darstellen (z. B. 0.1).
- Überlauf: Zahl zu groß → Unendlich (Inf)
- Unterlauf: Zahl zu klein → Null oder Subnormalzahl
- Vergleichsprobleme: == kann fehlschlagen wegen Rundungen
Beispiel:
Die Dezimalzahl -6,75 soll in eine IEEE 754 konforme (Single Precision, 32 Bit) Zahl umgewandelt werden.
- Vorzeichenbit
- Die Zahl ist negativ → Vorzeichenbit = 1
- Umwandlung in Binärform
-6,75 → binär:- \( 6 = 110 \)
- \(0,75 = 0.11 → 0,75 = 0,5 + 0,25 = 2^{-1} + 2^{-2} \)
Daraus folgt: 6,75 = 110.11 = 1.1011* 2²
- Exponent + Bias
IEEE 754 verwendet einen Bias von 127 für 32 Bit:- Exponent = 2
- Exponent mit Bias: 2+127=129
- Binär: → 129 = 10000001
- Mantisse
- Es werden nur die Nachkommastellen der normalisierten Zahl 1.1011 gespeichert
- Mantisse ist 10110000000000000000000bin (auf 23 Bit aufgefüllt)
Zusammensetzen
Vorzeichen | Exponent | Mantisse |
1 | 10000001bin | 10110000000000000000000bin |
Daraus fogt: 1 10000001 10110000000000000000000bin
→ Hexadezimal
Gruppieren in "Quadrupel"
1100 0000 1101 1000 0000 0000 0000 0000bin → C0D80000hex
Wer noch mit dem binären Zahlensystem Probleme hat, sei hier noch auf die Blogbeiträge Zahlensysteme und Grundrechnungsarten verwiesen.