Maison > Article > développement back-end > Explication détaillée des principes et opérations des nombres à virgule flottante en Python
Cet article présente principalement les principes et l'analyse des opérations des nombres à virgule flottante en Python. Il analyse les erreurs courantes dans les opérations sur les nombres à virgule flottante Python sous forme d'exemples et explique brièvement les principes des opérations sur les nombres à virgule flottante et les méthodes de mise en œuvre de comparaison. opérations.Amis qui en ont besoin Vous pouvez vous référer à ce qui suit
Les exemples de cet article décrivent les principes et les opérations des nombres à virgule flottante en Python. Je le partage avec vous pour votre référence, comme suit :
Regardons d'abord un exemple contre-intuitif :
>>> s = 0. >>> for i in range(10): s += .1 >>> s 0.9999999999999999 # 错误被累加
Regardons un exemple plus courant , exemple direct Exemples qui affectent la logique de jugement :
>>> from math import sqrt >>> a = sqrt(2) >>> a*a == a False
La raison pour laquelle les résultats ci-dessus se produisent est que Python (plus précisément, l'architecture matérielle informatique) représente des nombres à virgule flottante . , regardons la représentation informatique (basée sur binaire) de la décimale décimale 0.1. Pour la méthode de conversion d'une décimale décimale en une décimale binaire, veuillez consulter Python Decimal Decimal et Binary Decimal Conversion. Lors de la conversion du nombre décimal 0,1 en binaire, le résultat est 0,0001100110011001...., une boucle infinie. L'ordinateur ne peut pas afficher des résultats infinis et ne peut que tronquer les résultats. C'est la racine du problème de précision en virgule flottante.
“==” sur les flottants
Sur la base des considérations ci-dessus, lorsque nous effectuons des comparaisons d'égalité de nombres à virgule flottante, nous devons être particulièrement prudent et directement Il y a un problème avec l'utilisation de ==. Une approche courante consiste à ne pas vérifier si les nombres à virgule flottante sont égaux, mais à vérifier si les deux sont suffisamment proches,
>>> a = sqrt(2) >>> abs(a*a-2) < epsilon # 判断是否小于某一小量
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!