Edit v1.100 from 2004-10-07 to 2008-06-10 by CMi+NLu+TSc
Zahlenformate
Hier wird dargestellt wie man eine Zahl im Speicher ablegt!
Gleitkommazahlen
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:
=
|
Vorzeichen
Das Vorzeichen. (0 für Plus und 1 für Minus)
|
Exponente
Die Exponente 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
|
Umrechnung von 16,4 in die 32Bit Gleitkomma-Darstellung
Vorzeichen
Positiv (+) = 0B
Negativ (-) = 1B
|
Mantisse
= |
+ |
(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 |
|
= |
+ |
(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 |
|
= |
+ |
1000 |
, |
0110 0110 0110 0110 0110
|
B |
(M1)
Vorzeichen
Exponent
Ab hier geht die Darstellung zwei Wege.
Je nach dem ob die sogenannte Normalisierung der Mantisse
zur
Variante 0, oder zur
Variante 1, führen soll.
Um die jeweilige Variante zur realisieren,
muß 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.
Variante 0,
= |
+ |
0 |
, |
1000 0110 0110 0110 0110 0110
|
B |
*2+4D
|
Wir haben das Komma im (M1) um 4 Stellen nach Links (+)
von
1000,0110 ... auf ,1000 0110
verschoben und damit 2+4D erhalten.
Oder
Variante 1,
= |
+ |
1 |
, |
0000 1100 1100 1100 1100 110
|
B |
*2+3D
|
Wir haben das Komma im (M1) 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:
-
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
-
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 Gleitkommmazahl in eine Dualzahl 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.
-
Vorzeichen:
0B = Positiv (+)
1B = Negativ (-)
|
-
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
|
-
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
|
= |
+ |
(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 |
|
|