Zumindest fast - da hast du das Bit für's Vorzeichen unterschlagen. En detail:
Code:
double - 64 bit:
- Vorzeichen: 1 Bit - vz
- Mantisse: 52 Bit - m := (m0, m1, m2, .. m51)
- Exponent: 11 Bit - e := (e0, e1, e2, .. e10) Hierbei werden die einzelnen Bits dann als Binär-Ziffern aufgefasst und eine Zahl im Binärsystem ergibt sich dann wie folgt:
x := (-1)^vz * 1,m0m1m2..m51 * 2^(e0e1e2..e10 - 10000000000)
2 kleine Beispiele:
(1) Wie wird 4.0 in dieser Schreibweise dargestellt?
Code:
4.0 = 2^2 = (-1)^0 * 2^2, also vz = 0
= (-1)^0 * 1,00..0 * 2^2, also m = (0, 0, ...0)
= (-1)^0 * 1,00..0 * 2^(1026 - 1024), also e = (10000000010)
Die 1024 entsprechen dem (fest bestimmten) Abzug am Exponenten e, dem sogenannten Bias. Abschließend noch ein Beispiel dafür, dass ganz harmlos aussehende Zahlen wie 0.2 in dieser Darstellung nur gerundet wiedergegeben werden können:
Code:
0.2 = 900 719 925 474 099,2 / 2^52; also vz = 0
Allerdings ist noch immer ein Dezimalrest übrig und mehr als 52 Stellen stehen uns in der Binärdarstellung nicht zur Verfügung, Was bleibt ist - wie fast immer beim Rechnen mit Fließkomma-Zahlen - das Abschneiden des Nachkomma-Anteils:
Code:
0.2 ~= 900 719 925 474 099 / 2^52; also vz = 0
= 900 719 925 474 099 * 2^(-52) Wechsel zur Binärdarstellung
= 11 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 0011 * 2^(-52)
= 0,0011 0011 0011 .. * 2^0
= 1,1 0011 0011 ... * 2^(-3), also m = (1 0011 0011 .. 001)
= 1,1 0011 0011 ... * 2^(1021 - 1024), also e = (01111111101)
Die so dargestellte Dezimalzahl lautet aber:
0,19999999999999998334665463062265
Leicht daneben ...
Achim Dabrunz
[Diese Nachricht wurde von Dabrunz am 07. Jul. 2004 editiert.]
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP