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
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