floating-pointErste Schritte mit Fließkomma


Bemerkungen

In diesem Abschnitt erhalten Sie einen Überblick darüber, was Gleitkomma ist und warum ein Entwickler sie verwenden möchte.

Es sollte auch alle großen Themen innerhalb des Gleitkommas erwähnen und auf die verwandten Themen verweisen. Da die Dokumentation für Gleitkomma neu ist, müssen Sie möglicherweise erste Versionen dieser verwandten Themen erstellen.

Überblick

Was ist Fließkomma?

Es gibt zwei Arten von Nummern:

  • fester Punkt, an dem vor und nach dem Radixpunkt eine bestimmte Anzahl von Ziffern verfügbar ist.
  • Gleitkommazahl, bei der eine bestimmte Anzahl von Ziffern für die Mantisse und für den Exponenten verfügbar ist.

Ein Beispiel mit Dezimalstellen mit drei Dezimalstellen vor dem Dezimalpunkt und zwei Dezimalstellen nach der Dezimalstelle:

  • 0 würde als 000.00 dargestellt werden
  • 0,123 würde als 000.12 dargestellt werden
  • 0,00123 würde als 000.00 dargestellt werden
  • 1 würde als 001.00 dargestellt
  • 1.123 würde als 001.12 dargestellt
  • 1.00123 würde als 001.00 dargestellt
  • 123.456 würde als 123.45 dargestellt
  • 1234.56 ist ein Fehler, weil es als 234.56 gespeichert würde und das ist einfach falsch

Ein Beispiel mit Dezimalstellen mit fünf Dezimalstellen für die Mantisse und einer Dezimalstelle für den Exponenten:

  • 0 könnte als .00000 x 10 ^ 0 dargestellt werden
  • 0,1 könnte als 10000 x 10 ^ 0 dargestellt werden
  • 0.0000123456 könnte als .12345 x 10 ^ -4 dargestellt werden
  • 0.000000000123456 könnte als .12345 x 10 ^ -9 dargestellt werden
  • 0.00000000001 ist ein Fehler, weil der Exponent nicht groß genug ist, um die Zahl zu speichern
  • 1 könnte als .10000 x 10 ^ 1 dargestellt werden
  • 1.123 könnte als .11230 x 10 ^ 1 dargestellt werden
  • 1.00123 könnte als .10012 x 10 ^ 1 dargestellt werden
  • 123.45678 könnte als .12345 x 10 ^ 2 dargestellt werden
  • 123456789.1 könnte als .12345 x 10 ^ 9 dargestellt werden
  • 1000000000 ist ein Fehler, da der Exponent nicht groß genug ist, um die Anzahl zu speichern

Eine Fließkommazahl kann also Zahlen mit sehr unterschiedlichen Beträgen (0,000000000123456 und 123456789.1) mit der gleichen relativen Genauigkeit darstellen.

Festkommazahlen sind nützlich, wenn eine bestimmte Anzahl von Dezimalstellen unabhängig von der Größe der Nummer (z. B. Geld) benötigt wird. Fließkommazahlen sind nützlich, wenn die Größe variiert und noch Genauigkeit erforderlich ist. Zum Beispiel: Für einen Straßeningenieur sind Entfernungen in Metern und 0,01 Meter eines Messers unerheblich, aber für einen Mikrochip-Designer ist der Unterschied zwischen 0,0000001 Metern und 0,000000001 Metern enorm - und ein Physiker muss sehr viele Zahlen verwenden winzige Zahlen in der gleichen Berechnung. Die Genauigkeit in vielen verschiedenen Größen macht Fließkommazahlen nützlich.

Wie es funktioniert

Computer verwenden keine Dezimalzahlen - sie verwenden Binärdaten. Dies führt zu Problemen für Fließkommazahlen, da nicht jede Dezimalzahl genau durch eine Fließkommazahl dargestellt werden kann. Dies führt zu Rundungsfehlern in die Berechnungen.

Nachdem Sie alle Beispiele in Dezimalzahlen erstellt haben, ist es wichtig zu beachten, dass sie, da sie binär sind, anstatt eine Gleitkommazahl als Summe von Dezimalbrüchen zu speichern:

123.875 = 1/10^-2 + 2/10^-1 + 3/10^0 + 8/10^1 + 7/10^2 + 5/10^3
 

Computer speichern Gleitkommazahlen als Summe binärer Brüche:

123.875 = 1/2^-6 + 1/2^-5 + 1/2^-4 + 1/2^-3 + 1/2^-1 + 1/2^0 + 1/2^1 + 1/2^2 + 1/2^3
 

Es gibt viele verschiedene Arten, Bitmuster zu speichern, die diese Fraktionen repräsentieren. Die meisten Computer verwenden heute jedoch den IEEE-754-Standard. Es enthält Regeln zum Speichern von Dezimal- und Binärdarstellungen sowie für Datentypen unterschiedlicher Größe.

Normalerweise werden normale Nummern unter Verwendung des IEEE-Standards gespeichert:

  • ein Bit für das Vorzeichen - im MSB gespeichert, 1 bedeutet negativ und 0 bedeutet positiv
  • einige Bits für den Exponenten - der Bias wird abgezogen, um sowohl positive als auch negative Exponenten zu erhalten
  • einige Bits für die Mantisse - Ziffern hinter der Dezimalstelle mit einer impliziten 1 vor der Dezimalstelle.

Um einen allmählicheren Unterlauf zu ermöglichen, werden denormalisierte Zahlen (wenn die Exponenten-Bits alle Null sind) speziell behandelt: Der Exponent wird auf -126 gesetzt und die implizite führende 1 vor der Dezimalstelle wird NICHT zur Mantisse addiert.

32 Bit IEEE-754 Fließkommazahlen

Für eine normale 32-Bit-IEEE-754-Gleitkommazahl:

  • Bit 32 ist das Zeichen
  • Bits 24-31 sind der Exponent - die Vorspannung ist 127
  • Bits 1-23 sind die Mantisse

Eine normale Zahl wird also wie folgt berechnet:

-1^sign * 2^(exponent-bias) * 1.mantissa
 

Wenn das Bitmuster wäre:

0 10000101 11101111100000000000000
 

Dann ist der Wert:

-1^0 * 2^(133-127) * 1.111011111
-1^0 *     2^6     * (1 + 1/2 + 1/4 + 1/8 + 1/32 + 1/64 + 1/128 + 1/256 + 1/512)
   1 *      64     * 991/512
         123.875
 

Es gibt einige besondere Werte:

0 11111111 11111111111111111111111 = NaN
0 11111111 00000000000000000000000 = +infinity
1 11111111 00000000000000000000000 = -infinity
0 00000000 00000000000000000000000 = +Zero
1 00000000 00000000000000000000000 = -Zero
 

Einzelheiten zum 32-Bit-Format IEEE-754 finden Sie unter: