fgptnr.png

Edit v4.000 from 2002-09-27 to 2021-03-23 by CMi+NLu+TSc+HSc

Zahlenformate

Hier wird das Zahlenformate und seine Ablage im Speicher bei aufgezeigt und dargestellt.

Gleitkommazahlen

Tabelle 1: Bestandteile einer Gleitkommazahl nach IEEE754
= Vorzeichen Das Vorzeichen. (0 für Plus und 1 für Minus) Exponent Die Exponent der Gleitkommazahl. , bzw. + Entweder das Komma, oder ein Operator. Mantisse Die Nachkommastellen der Gleitkommazahl Zahlensystem H für Hexadezimal, B für Binär und D für Dezimal
Vorwort: Gleitkomma Zahlen sind die Zahlen mit dem der Computer mathematische Operationen durchführt. Die Standarddarstellung der Gleitkommazahlen ist in der IEE754 geregelt.
Dies war eine Aufgabe aus meinem Eignungstest.

Hier noch eine Erklärung (Legende), was die Farben der Tabellen für die Gleitkommazahl zu bedeuten haben:

Umrechnung von 16,4 in die 32Bit Gleitkomma-Darstellung

Vorzeichen

Tabelle 2: Vorzeichen einer Gleitkommazahl
Positiv (+) = 0B
Negativ (-) = 1B
Da die 16,4 positiv ist, wird das durch die 0 als Vorzeichen deutlich gemacht.

Mantisse

Links von der Tabelle wird beschrieben, wie man zu dem Ergebnis in der Tabelle gelangt.
Tabelle 2: Die dezimale Zahl.
= + 16 , 4 D  
Die dezimale Zahl wurde in Vorzeichen, Ganzzahl vor dem Komma und gebrochener Zahl nach dem Komma eingeteilt.

Tabelle 3: Durch 2 teilbare Teile für 16,4 Dezimal.
= + (1*16) + (0*8) + (0*4) + (0*2) + (0*1) + (0*1/2) + (1*1/4) + (1*1/8) + (1*1/16) + (1*1/32) + (1*1/64) + (1*1/128) + (1*1/256) + (1*1/512) + (1*1/1024) + (1*1/2048) + (1*1/4096) + (1*1/8192) + (1*1/16384) + (1*1/32768) + (1*1/65536) + (1*1/131072) + (1*1/262144) + (1*1/524288) + (1*1/1048576) D  
Die Zahl vor dem Komma, wird begonnen mit der größtmöglichen darin enthaltenen Potenz von Zwei (0, 1, 2, 4, 8, 16, …) in Einzelteile zerlegt. Ebenso die nach dem Komma mit 1/2, 1/4, …

Tabelle 4: Binäre Teile für 16,4 Dezimal.
= + (1*23) + (0*22) + (0*21) + (0*20) + (0*2-1) + (1*2-2) + (1*2-3) + (1*2-4) + (1*2-5) + (1*2-6) + (1*2-7) + (1*2-8) + (1*2-9) + (1*2-10) + (1*2-11) + (1*2-12) + (1*2-13) + (1*2-14) + (1*2-15) + (1*2-16) + (1*2-17) + (1*2-18) + (1*2-19) + (1*2-20) D  
Die Potenz von Zwei wird als solche auch geschrieben. 8 = 23 ebenso wie 1/8 = 2-3 ist.

Tabelle 5: Binäre Zahl für 16,4 Dezimal.
= + 1000 , 0110 0110 0110 0110 0110 B
Von den Potenz wird jetzt nur noch der davor stehende Faktor 0 oder 1 notiert und damit als binäre Zahl geschrieben.

Exponent

Tabelle 6: Exponent in der Variante 0
= + 0 , 1000 0110 0110 0110 0110 0110 B *2+4D

Ab hier geht die Darstellung zwei Wege. Je nach dem ob die so genannte Normalisierung der Mantisse zur Variante 0, oder zur Variante 1, führen soll. Um die jeweilige Variante zur realisieren, muss das Komma so lange nach rechts (-) oder nach links (+) verschoben werden, bis 0,... bzw. 1,... vorne steht. Das Verschieben um 1 Stelle nach Rechts, vermindert (-), bzw. nach Links, erhöht (+), den Exponenten um Eins.


Wir haben das Komma in der Mantisse um 4 Stellen nach Links (+) von
     1000,0110
     
… auf
      ,1000 0110
     
verschoben und damit 2+4D erhalten.

Tabelle 7: Exponent in der Variante 1
= + 1 , 0000 1100 1100 1100 1100 110 B *2+3D
Oder
Wir haben das Komma in der Mantisse um 3 Stellen nach Links (+) von
     1000,0110 
     ... auf 
     1,000 0110
     
verschoben und damit 2+3D erhalten.

Die Mantisse ist in beiden Fällen der Normalisierung fast gleich. Die Variante mit dem Ziel 1, hat eine Stelle mehr für die Genauigkeit zur Verfügung. Der Exponent unterscheidet sich ebenfalls, durch um Eins höhere bzw. niedere Potenz, welche sich im Faktor =2 niederschlägt.

Hier greifen zwei Umrechnungen zusätzlich ein, um die Möglichkeiten der Gleitkomma-Darstellung zu verbessern:

  1. Exponenten kleiner Null werden dadurch ermöglicht, in dem zu dem ermittelten Wert, in diesem Fall +4D, 127D dazugezählt werden.
    D.h. der mögliche kleinste Exponent kann 2-127D sein!
    In unserem Beispiel wird dieser zu: 2127D+4D = 2131D = 21000 0011B
  2. Die Ungenauigkeit hängt von der Anzahl der Stellen in der Mantisse ab, d.h. bei dieser Art beträgt sie 2-23D.
    Man kann diese verdoppeln, wenn man vereinbart die generell auftretende führende Stelle 0,1B bzw. 1,0B der Mantisse nicht mit zu notieren und damit allen Stellen der Mantisse die Möglichkeit zu geben, um eine Stelle nach links zu rutschen und damit die Ungenauigkeit auf 2-24D zu vermindern.

    Damit wird aus: 

    = 0,1 000 0110 0110 0110 0110 011B Variante 0,
    = 0000 1100 1100 1100 1100 110B
    bzw.
    = 1, 0000 1100 1100 1100 1100 11B Variante 1,
    = 0000 1100 1100 1100 1100 110B

    Nachteil: Die Zahl NULL gibt es nicht mehr direkt. Sie wird durch den kleinsten Exponenten 1*2-127D angenähert!


Ergebnis

Als Ergebnis erhält man die binäre Darstellung der Mantisse, des Vorzeichens und des Exponenten in der Variante 1, und Variante 0, von der dezimalen Zahl 16,4.

31
 S
 0

 0
30              23
 E E E E  E E E E
 1 0 0 0  0 1 0 0
 bzw.
 1 0 0 0  0 0 1 1
    Exponent
22                                                00
 M M M M  M M M M  M M M M  M M M M  M M M M  M M M
 0 0 0 0  1 1 0 0  1 1 0 0  1 1 0 0  1 1 0 0  1 1 0

 0 0 0 0  1 1 0 0  1 1 0 0  1 1 0 0  1 1 0 0  1 1 0
                    Mantisse


 Variante 0,

 Variante 1,
Vorzeichen

Eine Gleitkommazahl in eine Dezimalzahl umrechnen

Gegeben ist die 32Bit-Gleitkommazahl in ihrer binären Darstellung mit 1100 0011 0111 0110 0100 0000 0000 0000B, so wie sie im Speicher bzw. in einer Datei vorliegt.

31
 S
 1
30              23
 E E E E  E E E E
 1 0 0 0  0 1 1 0
    Exponent
22                                                 00
 M M M M   M M M M  M M M M  M M M M  M M M M  M M M
 1 1 1 0   1 1 0 0  1 0 0 0  0 0 0 0  0 0 0 0  0 0 0
                      Mantisse
Vorzeichen

Zuerst sind ein paar Umrechnungen nötig.

  1. Vorzeichen:

    0B = Positiv (+)
    1B = Negativ (-)
  2. Als erstes muss man die 0,1B (1/2D) vor die Mantisse setzen.

    =
    =
    1110 1100 1000 0000 0000 000B
    0,1111 0110 0100 0000 0000 0000B
  3. Nun muss man die Exponenten zurückrechnen. 21000 0110B = 2134D

    dieses minus die 127 d.h. 2134D-127D = 27D

= - 0 , 1111 0110 0100 0000 0000 0000 B *27D
= - 1111 011 , 001 B  
= - (1*26) + (1*25) + (1*24) + (1*23) + (0*22) + (1*21) + (1*20) - (0*2-1) + (0*2-2) + (1*2-3) D  
= - (1*64) + (1*32) + (1*16) + (1*8) + (0*4) + (1*2) + (1*1) - (0*1/2) + (0*1/4) + (1*1/8) D  
= - 123 , 125 D