[PYTHON] Les nombres de type flottant ne sont pas les mêmes que la minorité de nombres décimaux

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

Les nombres de type flottant ne sont pas les mêmes que la minorité de nombres décimaux
[Python3] "A // B" et "math.floor (A / B)" ne sont pas toujours les mêmes! ??
Calcul de la fraction flottante de la commande awk
Python open et io.open sont les mêmes
Accéder aux fichiers dans le même répertoire que le fichier exécutable
Résultat du calcul après la virgule décimale en Python