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
Libérer: 2024-12-30 19:52:10
original
685 Les gens l'ont consulté

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.
}
Copier après la connexion

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.
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal