Maison >Java >javaDidacticiel >Comment puis-je comparer avec précision les valeurs doubles en Java ?
Comparer efficacement des valeurs doubles en Java
En Java, comparer deux valeurs doubles à l'aide de l'opérateur d'égalité (==) peut conduire à des résultats inattendus en raison des limites de précision inhérentes à l'arithmétique à virgule flottante. Pour surmonter ce problème, il est crucial d'adopter des approches alternatives pour comparer efficacement les valeurs doubles.
Considérons l'exemple suivant :
double a = 1.000001; double b = 0.000001; boolean result = (a - b) == 1.0;
Étonnamment, cette comparaison est évaluée comme fausse, même si intuitivement elle devrait l'être vrai. En effet, l'opération de soustraction (a - b) donne 0,99999999999999999, ce qui est légèrement inférieur à 1,0.
Pour résoudre ce problème, une approche plus robuste consiste à utiliser une marge d'erreur, ou delta, à l'intérieur de laquelle les valeurs peuvent être considérées comme égales. Une façon d'implémenter cela consiste à utiliser Math.abs() :
double a = 1.000001; double b = 0.000001; double delta = 0.000001; boolean result = Math.abs(a - b - 1.0) <= delta;
Dans ce cas, si la différence absolue entre (a - b) et 1,0 est inférieure ou égale au delta prédéfini de 0,000001, la comparaison sera évaluée comme vraie. Cette approche permet des comparaisons plus précises tout en tenant compte des erreurs de précision potentielles.
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!