Maison >Java >javaDidacticiel >Comment puis-je comparer en toute sécurité des valeurs doubles en Java pour éviter les erreurs de précision ?

Comment puis-je comparer en toute sécurité des valeurs doubles en Java pour éviter les erreurs de précision ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-30 19:52:10676parcourir

How Can I Safely Compare Double Values in Java to Avoid Precision Errors?

Le risque de précision de la double comparaison en Java et sa résolution

Comparer des valeurs doubles en Java peut être une tâche trompeuse. Une comparaison naïve, comme illustré ci-dessous, peut donner des résultats inattendus en raison des limitations de précision en virgule flottante :

double a = 1.000001;
double b = 0.000001;

if ((a-b) == 1.0) {
  // This condition evaluates to false, though it seemingly should be true.
}

Le problème se pose car la soustraction a-b ne renvoie pas exactement 1,0, mais une valeur très proche. L'arithmétique à virgule flottante peut introduire des erreurs d'arrondi, entraînant une valeur de 0,99999999999999999, qui n'est pas égale à 1,0.

Pour éviter cet écueil, il est recommandé d'utiliser une comparaison approximative plutôt qu'exacte. La méthode Math.abs() peut être utilisée pour calculer la différence absolue entre le résultat réel et la valeur attendue, et cette différence peut être comparée à une petite valeur de tolérance :

double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {
  // This condition evaluates to true, as the absolute difference is small enough.
}

En définissant une tolérance appropriée valeur, vous pouvez contrôler le niveau de précision acceptable pour la comparaison. Cette approche vous permet de gérer efficacement les limitations de précision en virgule flottante et de garantir des évaluations précises.

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