Zum Hauptinhalt springen

IT-Mathematik

Gleitkommazahlen und Rundungsfehler

Teaser – volle Lektion nach Anmeldung

Lernziele dieser Lektion

  • Sie verstehen, warum Computer reelle Zahlen nur näherungsweise speichern können
  • Sie kennen den Unterschied zwischen Festkomma- und Gleitkommazahlen
  • Sie können erklären, warum 0,1 + 0,2 ≠ 0,3 in vielen Programmiersprachen herauskommt
  • Sie erkennen typische Situationen, in denen Rundungsfehler gefährlich werden (Geldbeträge, lange Summen)
  • Sie kennen Faustregeln zum sicheren Vergleichen von Gleitkommazahlen

Warum ist das überhaupt ein Problem?

In Lektion 1 dieses Moduls haben Sie gesehen, wie Computer Ganzzahlen im Binärsystem speichern. In Lektion 2 haben Sie Zweierpotenzen kennengelernt. Beide Konzepte kommen jetzt zusammen: Wie speichert ein Rechner eine Zahl wie 3,143{,}14 oder 0,10{,}1 - Zahlen, die keine ganzzahligen Bits sind?

Ein Computer hat nur endlich viele Bits pro Zahl (meist 32 oder 64). Damit lassen sich höchstens 2322^{32} bzw. 2642^{64} verschiedene Werte darstellen. Die reellen Zahlen sind aber überabzählbar unendlich viele. Deshalb kann der Computer die allermeisten reellen Zahlen nur annähern - und das ist die Quelle von Rundungsfehlern.

Zwei Wege, Kommazahlen zu speichern

Es gibt zwei grundlegend unterschiedliche Ansätze:

  • Festkomma (fixed-point): Das Komma steht an einer fixen Position. Beispiel: Beträge in Cent speichern, nie in Euro mit Komma. 1 EUR = 100, 23,45 EUR = 2345. Keine Rundungsfehler, aber eingeschränkter Bereich.
  • Gleitkomma (floating-point): Die Position des Kommas "gleitet". So wie im Dezimalsystem 1,23105=1230001{,}23 \cdot 10^5 = 123000, speichert der Computer Mantisse und Exponent getrennt. Riesiger Zahlenbereich, dafür Rundungsfehler.

Wissenschaftliche Schreibweise im Binärsystem

In Modul 2 haben Sie die wissenschaftliche Schreibweise im Dezimalsystem kennengelernt: 3,14102=3143{,}14 \cdot 10^2 = 314. Gleitkommazahlen funktionieren genauso, nur zur Basis 2:

Struktur einer Gleitkommazahl (IEEE 754)

Jede Gleitkommazahl wird gespeichert als:

Zahl=(1)VorzeichenMantisse2Exponent\text{Zahl} = (-1)^{\text{Vorzeichen}} \cdot \text{Mantisse} \cdot 2^{\text{Exponent}}

Ein 64-Bit-Double (Standardformat in den meisten Sprachen) verteilt die 64 Bits so:

  • 1 Bit für das Vorzeichen (0 = positiv, 1 = negativ)
  • 11 Bits für den Exponenten (Zahlenbereich ca. 1030810^{-308} bis 1030810^{308})
  • 52 Bits für die Mantisse (ergibt etwa 15-17 signifikante Dezimalstellen)

Ein 32-Bit-Float hat entsprechend weniger: 8 Bits Exponent, 23 Bits Mantisse - nur 7-8 signifikante Stellen.

Dies ist nur ein kurzer Auszug. Die vollständige Lektion mit interaktiven Übungen und Lernfortschritts-Tracking gibt es nach Einlösung eines Einschreibeschlüssels.