Maison >Java >javaDidacticiel >Comment puis-je comparer en toute sécurité des valeurs doubles en Java pour éviter les erreurs de précision ?
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!