Maison >développement back-end >Tutoriel Python >Comment puis-je comparer avec précision des nombres à virgule flottante pour une quasi-égalité en Python ?

Comment puis-je comparer avec précision des nombres à virgule flottante pour une quasi-égalité en Python ?

DDD
DDDoriginal
2024-12-22 19:24:11678parcourir

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

Comparaison des flotteurs pour une quasi-égalité en Python : un examen plus approfondi

En raison de problèmes potentiels d'arrondi et de précision, la comparaison des flotteurs pour une égalité exacte dans Python peut être un défi. Il s'agit d'un problème bien connu, comme le souligne le billet de blog « Comparing Floating Point Numbers, 2012 Edition » de Bruce Dawson. Pour relever efficacement ce défi en Python, plusieurs approches peuvent être envisagées.

Fonctions de bibliothèque standard

Python 3.5 a introduit math.isclose() et cmath.isclose() fonctions, spécialement conçues pour comparer des flotteurs avec un niveau de tolérance. Ces fonctions acceptent trois arguments :

  • a et b : les valeurs flottantes à comparer
  • rel_tol (facultatif) : la tolérance relative, qui est un facteur appliqué à la plus grande magnitude de a et b pour définir la différence autorisée
  • abs_tol (facultatif) : une tolérance absolue, qui fixe une différence minimale seuil

Si la différence absolue entre a et b est inférieure à rel_tol * max(abs(a), abs(b)) ou abs_tol, les valeurs sont considérées comme égales.

Fonction personnalisée pour les versions Python antérieures

Si vous utilisez une version Python antérieure à 3.5, vous pouvez implémenter votre propre fonction isclose() basée sur l'extrait de code suivant fourni dans la documentation :

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)

Cette fonction personnalisée offre les mêmes fonctionnalités que la fonction de bibliothèque standard, vous permettant de comparer des flotteurs dans une plage de tolérance spécifiée.

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