Wie stellen Gleitkommazahl in Binärdatei. IEEE
Ähnlich wie dezimal-Binär-zahlen können haben vertreten schwimmt auch. Jetzt lese ich, dass es haben kann, die Schwimmer von der Art
0.5
:0.1
, 0.25
:0.01
, 0.125
:0.001
... und so weiter. Aber dann, zum Beispiel, wie ist die 0.1(dezimal) repräsentiert im binären?
Auch, eine decimal float, wie es zu konvertieren, um die entsprechende Dezimalzahl, (es ist nicht so einfach).
Edit: Also ich verstehe, dass die bessere Frage wäre gewesen, wie das konvertieren von decimal float binary? Jetzt verstehe ich es, dass wir multiplizieren die Nachkommastellen, bis es null wird.
Jetzt ist es sehr gut möglich, dass zwei schwebenden Punkte können haben die gleiche Darstellung richtig?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gegeben, wie viele bits?
0.1 b:
Wie Sie sehen können ist es eine Annäherung.
Jedes bit nach der radix point entspricht 1/2^(position_after_bit_string).
So
0.0000001 = 1/2^7 = 0.0078125
Pseudocode:
Weitere Infos Warum kann nicht dezimal zahlen werden genau in der Binärdatei dargestellt?
Eine andere Beobachtung, die hilfreich sein könnten. Die 'Ganzheit' einer floating-point-Zahl in die binäre in seiner "normalen" form, zum Beispiel, wenn der Wert 25.7482 Sie haben die bits '11001' (25) der floating-point, mit den folgenden bits repräsentieren der Teil (eigentlich das erste '1' wird nie gespeichert, es ist implizit in dem format).
Wenn Sie subtrahieren 25.0 aus, dass die Zahl und multiplizieren durch 10, erhalten Sie 7.482, und durch die Prüfung der ganzzahlige Teil des Werts, erhalten Sie den ersten Bruch-stellige, '7'.
Subtrahieren 7.0, mit 10 multipliziert gibt 4.82 , damit die nächste Ziffer '4', und so weiter. Dieser Prozess wird in der Theorie Ende schließlich mit einem null-Ergebnis, da alle Werte, die können genau dargestellt werden im floating-point-format haben eine exakte dezimale Darstellung; jedoch, die 'exakt' zu Folge haben könnte weit mehr stellen, als eigentlich angemessen angesichts der Präzision der original floating point (und Sie müssen möglicherweise zusätzliche Präzision intern zu erhalten, die vollständig exakte Ergebnis, jedenfalls - Sie müssen sicherstellen, dass die Multiplikation mit 10 nicht generieren einem Rundungsfehler).
Sowie für zahlen wie 6.432 e-200 ,diese Methode ist praktikabel, aber nicht sehr effizient (Sie würden erzeugen, 199 Nullen vor der ersten '6' entstanden).