Maison >développement back-end >Tutoriel Python >Comment puis-je comparer avec précision les nombres à virgule flottante en Python ?

Comment puis-je comparer avec précision les nombres à virgule flottante en Python ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-26 19:39:18569parcourir

How Can I Accurately Compare Floating-Point Numbers in Python?

Comparaison de nombres à virgule flottante avec précision en Python

Dans le domaine de la programmation, comparer des nombres à virgule flottante pour l'égalité présente des défis. Comme l'ont souligné des experts comme Bruce Dawson, la détermination de l'égalité est compliquée par les erreurs d'arrondi et les limitations de précision.

Existe-t-il une solution en Python ?

Python offre une myriade de solutions à cette question. Notamment, Python 3.5 introduit les fonctions math.isclose et cmath.isclose, suivant les conseils de la PEP 485. Ces fonctions fournissent un moyen fiable de comparer des nombres à virgule flottante pour une égalité approximative.

Détails de mise en œuvre :

import math

# Compare two floating-point numbers for almost-equality
result = math.isclose(0.1, 0.10000000000000001, rel_tol=1e-09, abs_tol=0.0)

Fonction personnalisée pour Python antérieur Versions :

Pour les versions Python antérieures à 3.5, la documentation suggère la fonction personnalisée suivante :

def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
    return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)

Paramètres expliqués :

  • rel_tol : définit la tolérance relative, en ajustant la différence acceptable en fonction de l'ampleur des valeurs étant comparé.
  • abs_tol : Spécifie une tolérance absolue, permettant une comparaison directe sans tenir compte de l'ampleur des nombres.

L'utilisation de la fonction math.isclose ou de la fonction personnalisée garantit une comparaison précise de nombres à virgule flottante pour une égalité approximative, répondant aux défis posés par les problèmes de précision.

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