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