Stellen Sie sich ein Drittel in der Basis 10 mit einer begrenzten Anzahl von Stellen zu vertreten haben.
Mit 2 Ziffern (lassen Sie uns diese mit einfacher Genauigkeit nennen), wird es 0,33
mit 4 Ziffern (double precision) sei es 0,3333
werden also die beiden Annäherungen sind nicht gleich.
Nun ist diese umsetzen zu repräsentieren 1/5 in Basis 2. Sie auch eine unendliche Anzahl von Bits (Binärziffern) müssen - es ist ,001100110011 ....
Mit 24bit Signifikanden (IEEE 754 mit einfacher Genauigkeit) und 53 Bits significand (doppelte Genauigkeit), die zwei Gleitkomma-Approximation wird anders sein.
Das Gleiche gilt für 1/3 ...
Wenn die Zahl genau in einfacher Genauigkeit ohne Annäherung dargestellt werden, dann werden beide Darstellung gleich sein.
Das ist ein Zähler in weniger als 25 Bits (ohne die abschließenden Nullen), und ein Nenner ist eine Potenz von 2. (aber nicht zu hoch ein Exponent sowohl im Zähler als auch im Nenner ...).
zum Beispiel 1/2 3/2 5/2 ... 1/4 3/4 5/4 usw. ... wird die gleiche Darstellung haben.
2^24 + 1 wird nicht die gleiche Darstellung haben.
Aber 2^60 wird.
Es gibt anderen Fall, wenn Darstellung ungenauer sein wird, aber Näherung wird die gleiche sein:
2^54 + 1 hat gleichen Schwimmers und Doppel Näherung.
so wird 1 + 2^-60 zum Beispiel.
die erste Ungleichung gilt tatsächlich für Zahlen wie 0,2 zum Beispiel. wenn ich x = np.float64 (0.2) und y = np.float32 (0.2) habe, wenn ich x == y mache, gibt es False aus. Ist 0.2 nicht genau in einer einzigen dargestellt? – MSB
@MSB Ich habe auf Ihren Kommentar in der Antwort geantwortet. –