LU01k - Binär codierte Fliesskommazahlen

Binäre Fliesskommazahlen

Siehe http://www.ulthryvasse.de/gleitkommazahlen.html

Zur Erinnerung: Fliesskommazahlen werden als Multiplikation dargestellt. Zum Beispiel 1.4735 * 105.

  • 1.4735 ist die Mantisse
  • 10 ist die Basis
  • 5 ist der Exponent

Oder als exponentielle Zahl dargestellt: 1.4735e5

Fliesskommazahlen werden zur binären Codierung in drei Elemente zerlegt:

Das IEEE-Format definiert, wie die einzelnen Elemente binär codiert werden.

32 Bit Short-Format

64 Bit Long-Format

Dezimalzahl als binäre Fliesskommazahl

  1. Notiere das Vorzeichen (+ = '0' / - = '1') und entferne das Vorzeichen.
  2. Verschiebe den Dezimalpunkt bis eine ganze Zahl entsteht, die direkt vor dem Dezimalpunkt keine Nullen hat. Diese Zahl ist die Mantisse.
    • Bei einer Ganzzahl wird der Dezimalpunkt nach links verschoben (z.B. 1500 ⇒ 15).
    • Bei einem Dezimalbruch wird der Dezimalpunkt nach rechts verschoben (z.B. 4.178 ⇒ 4178).
  3. Notiere die Anzahl Stellen um die der Dezimalpunkt bei 2. verschoben wurde als Exponent.
    • Der Dezimalpunkt wurde nach links verschoben: positiver Exponent (z.B. 1500 ⇒ 15 / Zwei Stellen nach links verschoben = 2).
    • Der Dezimalpunkt wurde nach rechts verschoben: negativer Exponent (z.B. 4.178 ⇒ 4178 / Drei Stellen nach rechts verschoben = -3).
  4. Addiere den Bias zum Exponenten
    • Im Short-Format ist der Bias 127
    • Im Long-Format ist der Bias 1023
  5. Notiere den Exponenten als Binärzahl mit 8 (Short-Format) oder 11 (Long-Format) Stellen.
  6. Notiere die Mantisse als Binärzahl mit 23 (Short-Format) bzw. 52 (Long-Format) Stellen.
    • Ist die Binärzahl kürzer als die Anzahl Stellen ⇒ Fülle die Stellen mit führenden Nullen auf.
    • Ist die Binärzahl länger als die Anzahl Stellen ⇒ Schneide die überzähligen Stellen hinten ab.

Bias

Der Bias ist ein Korrekturwert für die binäre Speicherung des Exponenten. Dieser Korrekturwert wird zum Exponenten addiert, wodurch der Exponent in der binären Speicherform immer eine positive Zahl ist. Dadurch muss das Vorzeichen des Exponenten nicht gespeichert werden.

Beispiele

In beiden Beispielen verwenden wir das 32 Bit Short-Format.

Schritt Beispiel 1: -87900 Beispiel 2: 934.7531
Zwischenresultat Binäre Speicherung Zwischenresultat Binäre Speicherung
1. Vorzeichen codieren und entfernen 87900 1… …. …. …. …. …. …. …. 934.7531 0… …. …. …. …. …. …. ….
2. Dezimalpunkt verschieben Mantisse=879 Mantisse=9347531
3. Exponent notieren Exponent=2 Exponent= -4
4. Addiere 127 (Bias) zum Exponenten Exponent=2+127=129 Exponent=-4+127=123
5. Exponent als Binärzahl 1100 0000 1… …. …. …. …. …. 0011 1101 1… …. …. …. …. ….
6. Mantisse als Binärzahl 1100 0000 1000 0000 0000 0011 0110 1111 0011 1101 1100 0111 0101 0000 1110 01011)

Für Fliesskommazahlen im Long-Format gilt das gleiche Vorgehen. Die Unterschiede in der binären Speicherung sind:

Exponentielle Zahl als binäre Fliesskommazahl

Die Umwandlung einer exponentiellen Zahl wie -8.79E2 bzw. -8.79*102 kann über den Umweg einer “normalen” Dezimalzahl erfolgen.

Schritt Beispiel 1: -8.79E4 Beispiel 2: 9.347531E2
Zwischenresultat Binäre Speicherung Zwischenresultat Binäre Speicherung
0. Umwandlung -8.79E4 = -87900 9.347531E2 = 934.7531
Nun folgen die Schritte 1-6 von oben.

Sie können den Umweg über eine Dezimalzahl auch auslassen:

Schritt Beispiel 1: -8.79E4 Beispiel 2: +9.347531E2
Zwischenresultat Binäre Speicherung Zwischenresultat Binäre Speicherung
1. Vorzeichen codieren und entfernen 8.79E4 1… …. …. …. …. …. …. …. 9.347531E2 0… …. …. …. …. …. …. ….
2. Dezimalpunkt verschieben Mantisse=879 Mantisse=9347531
3. Exponent notieren Exponent=-2 + 4 = 2 Exponent=-6 + 2 = -4
4. Addiere 127 (Bias) zum Exponenten Exponent=2+127=129 Exponent=-4+127=123
5. Exponent als Binärzahl 1100 0000 1… …. …. …. …. …. 0011 1101 1… …. …. …. …. ….
6. Mantisse als Binärzahl 1100 0000 1000 0000 0000 0011 0110 1111 0011 1101 1100 0111 0101 0000 1110 0101

Rundungsfehler

Binäre Zahlen können nur Brüche wie 1/2, 1/4, 1/8, 1/16, … darstellen. Daher kann es zu Rundungsfehlern kommen, wenn diese ins Dezimalsystem übertragen werden. Dies liegt daran, dass zur Darstellung eines Dezimalbruchs relativ viele binäre Stellen benötigt werden.

Beispiel

0.7310 = 10 1110 1011 1000 0101 0001 11112

Somit brauchen wir 26 binäre Stellen um den Bruch korrekt abzubilden. Bei einer Fliesskommazahl im Short-Format (32 Bit) stehen aber nur 23 binäre Stellen für die Mantisse zur Verfügung. Somit könnten wir nur eine Annäherung abspeichern: 0.72999978110

Selbst mit dem Long-Format (64 Bit) stossen wir schnell an Grenzen.


Marcel Suter

1)
Die Mantisse hätte 24 binäre Stellen. Da aber nur 23 Bit Speicherplatz vorhanden sind, wurde die letzte Stelle abgeschnitten