[PYTHON] Gleitkommazahlen entsprechen nicht der Minderheit der Dezimalzahlen

** Python-Lernausgabe. ** ** **

Das Mathematikmodul hat eine .isclose () -Funktion. Wird beim Vergleichen von numerischen Werten vom Float-Typ verwendet. Ob jeder eine Annäherung ist.

>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True

Generell kann Computerhardware, einschließlich Python, Gleitkommazahlen nicht genau darstellen. Da es sich beispielsweise um einen binären Bruch handelt, handelt es sich um einen binären Bruch

0.001

Ist

0/2 + 0/4 + 1/8

Es wird der Wert.

Die meisten Minderheiten können jedoch nicht genau als binäre Brüche dargestellt werden, sodass ungefähre Werte gespeichert werden.

Verwenden Sie die Methode float.as_integer_ratio (), um den genauen Wert des Float-Typs zu erhalten. Ersetzen Sie x durch 3 und verwenden Sie diese Methode, um den genauen Wert als rationale Zahl auszudrücken ...

>>> x = 0.3
>>> x.as_integer_ratio()
(5404319552844595, 18014398509481984)
>>> x == 5404319552844595 / 18014398509481984
True
>>> 5404319552844595 / 18014398509481984
0.3

Irgendwie erstaunlich.

Ersetzen Sie nun x durch 0.1 und multiplizieren Sie mit 3. Dann

>>> x = 0.1
>>> x.as_integer_ratio()
(3602879701896397, 36028797018963968)
>>> 3602879701896397 /  36028797018963968
0.1
>>> 3602879701896397 /  36028797018963968 * 3
0.30000000000000004

so was. Daher gilt der bedingte Ausdruck von "0,1 + 0,1 + 0,1 == 0,3" nicht.

Man kann jedoch sagen, dass "0,30000000000000004" eine Annäherung von "0,3" ist. Daher, wie oben erwähnt,

>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True

Die Funktion .isclose () gibt True zurück.

Referenz Offizielle Python-Dokumentation: 15. Gleitkomma-Arithmetik, ihre Probleme und Einschränkungen

Recommended Posts

Gleitkommazahlen entsprechen nicht der Minderheit der Dezimalzahlen
[Python3] "A // B" und "math.floor (A / B)" sind nicht immer gleich! ??
Berechnung des schwebenden Bruchs des Befehls awk
Python open und io.open sind gleich
Greifen Sie auf Dateien im selben Verzeichnis wie die ausführbare Datei zu
Berechnungsergebnis nach dem Dezimalpunkt in Python