Fließkommadarstellung


schiese

Erfahrenes Mitglied
#1
Hallo,

ich musste vor kurzem mit sehr kleinen Zahlen rechnen und da kam mir eine Frage auf: Wie werden sehr kleine oder große Zahlen in die Fließkommadarstellung umgewandelt?
Das Vorgehen an sich ist mir bekannt. Wenn ich händisch die Zahl 6.4 nach etwas Rechnen in einen Float umwandle und das Ergebnis mit dem Wert, den mir mein C++-Programm ausspuckt vergleiche, sind die Werte identisch.
Wenn ich allerdings die Elementarladung q=1.602*10^(-19)C oder die Masse der Erde m=5.9722*10^(24)kg umrechnen möchte, bin ich etwas ratlos, wie ich mit dem Exponenten umgehen soll. Ich könnte einen Basiswechsel durchführen, den gebrochenen Anteil des Exponenten mit den 1.602 multiplizieren und erhalte q=1.477584*2^(-63), was ich nun leicht in die Fließkommadarstellung bringen kann. Durch den Basiswechsel büße ich ja nun etwas von der Genauigkeit ein. Dies habe ich mal gemacht und erhalte: 0 01000000 01111010010000101111010, was 1.601999916849...E-19 ergibt. Mein C++-Programm spuckt 1.60200004610...E-19 aus.

Das die Genauigkeit nur 6-7 Stellen beträgt ist mir bekannt. Mich interessiert nur das Vorgehen.

Gruße
schiese
 

schiese

Erfahrenes Mitglied
#2
Ich hatte einen Fehler beim Runden. Ich habe das Sticky-Bit vergessen. Ich habe nur das Guard- und das Round-Bit berücksichtigt und das niederwertigste Mantissen-Bit betrachtet. Das dieses Null ist, habe ich nicht gerundet, was ich machen musste, da GRS = 101 ist.

Bleibt aber meine Frage, wie so eine Zahl intern in die Fließkommadarstellung gebracht wird. Wenn ich meine händische Rechnung zu Grunde lege, sind ja ziemlich viele Schritte nötig, so dass für die Umwandlung ziemlich viel Zeit draufgehen müsste.