Maison >développement back-end >Tutoriel Python >Comment atténuer les erreurs de virgule flottante en Python ?
Éviter les erreurs à virgule flottante en Python
Dans le domaine de la programmation, il est essentiel de comprendre les subtilités des calculs à virgule flottante, car ils peuvent introduire des erreurs inattendues s’il n’est pas géré correctement. Cet article explore un exemple pratique qui met en évidence les pièges de l'arithmétique à virgule flottante.
Le problème de la racine carrée
Considérons une fonction Python conçue pour approximer les racines carrées :
<code class="python">def sqrt(num): root = 0.0 while root * root < num: root += 0.01 return root
En utilisant cette fonction, nous rencontrons des résultats surprenants :
>>> sqrt(4) 2.0000000000000013 >>> sqrt(9) 3.00999999999998</code>
L'arithmétique à virgule flottante explique ces inexactitudes. Lorsqu'ils représentent des nombres fractionnaires, les ordinateurs les stockent sous la forme d'une combinaison d'entiers et d'exposants. En raison des limitations de cette représentation, certaines valeurs décimales ne peuvent pas être représentées exactement, ce qui conduit à des approximations.
Comprendre l'erreur
Dans le code ci-dessus, le problème réside dans le incrément utilisé pour augmenter la valeur racine. Bien que nous ayons l'intention d'ajouter une valeur de 0,01, la valeur réelle stockée dans le registre à virgule flottante est légèrement différente et supérieure à 0,01.
Résoudre l'erreur
Pour éviter erreurs en virgule flottante, diverses approches peuvent être utilisées :
<code class="python">from decimal import Decimal as D def sqrt(num): root = D(0) while root * root < num: root += D("0.01") return root
Now, the function returns precise results, such as: ``` >>> sqrt(4) Decimal('2.00') >>> sqrt(9) Decimal('3.00') ``` </code>
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!