** Sortie d'apprentissage Python. ** **
Le module mathématique a une fonction .isclose ()
.
Utilisé lors de la comparaison des valeurs numériques de type flottant. Si chacun est une approximation.
>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True
En règle générale, le matériel informatique, y compris Python, ne peut pas représenter avec précision les nombres à virgule flottante. Puisqu'il est exprimé sous forme de fraction binaire, par exemple, une fraction binaire
0.001
Est
0/2 + 0/4 + 1/8
Cela devient la valeur.
Cependant, la plupart des minorités ne peuvent pas être représentées avec précision sous forme de fractions binaires, de sorte que des valeurs approximatives sont stockées.
Pour obtenir la valeur exacte du type float, utilisez la méthode float.as_integer_ratio ()
. En remplaçant 3 par x et en utilisant cette méthode pour exprimer la valeur exacte sous forme de nombre rationnel ...
>>> x = 0.3
>>> x.as_integer_ratio()
(5404319552844595, 18014398509481984)
>>> x == 5404319552844595 / 18014398509481984
True
>>> 5404319552844595 / 18014398509481984
0.3
En quelque sorte incroyable.
Maintenant, remplacez 0,1 par x et multipliez par 3. Puis
>>> x = 0.1
>>> x.as_integer_ratio()
(3602879701896397, 36028797018963968)
>>> 3602879701896397 / 36028797018963968
0.1
>>> 3602879701896397 / 36028797018963968 * 3
0.30000000000000004
comme ça. Par conséquent, l'expression conditionnelle de «0,1 + 0,1 + 0,1 == 0,3» ne tient pas.
Cependant, "0,30000000000000004" peut être considéré comme une approximation de "0,3". Par conséquent, comme mentionné ci-dessus,
>>> import math
>>> math.isclose(0.1+0.1+0.1, 0.3)
True
La fonction .isclose ()
renvoie True.
référence Documentation officielle Python: 15. Arithmétique en virgule flottante, ses problèmes et ses limites
Recommended Posts