Maison  >  Article  >  développement back-end  >  Explication détaillée des principes et opérations des nombres à virgule flottante en Python

Explication détaillée des principes et opérations des nombres à virgule flottante en Python

黄舟
黄舟original
2017-10-12 10:56:443155parcourir

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn