Maison >Java >javaDidacticiel >Pourquoi la comparaison directe d'égalité ('==') est-elle problématique pour les flotteurs en Java ?
Énigme de comparaison à virgule flottante en Java
Java propose l'opérateur de comparaison d'égalité '==' pour tester les valeurs à virgule flottante, comme documenté sur java.sun. Cependant, l'analyse statique soulève souvent des inquiétudes quant à son utilisation pour comparer les flotteurs.
Pièges de '==' pour les flotteurs
Malgré le rôle désigné de l'opérateur '==' pour comparaisons flottantes, cela s'avère problématique en raison de l'imprécision inhérente à l'arithmétique à virgule flottante. Les valeurs à virgule flottante sont représentées en interne sous forme d'expansions décimales finies, introduisant des erreurs d'arrondi et des troncatures lors des calculs. En conséquence, deux nombres à virgule flottante qui devraient logiquement être égaux peuvent différer d’une infime quantité. Cette variance peut conduire à des faux positifs ou négatifs lors de l'utilisation de « == » pour déterminer l'égalité.
Approche préférée pour l'égalité des flotteurs
Pour tester avec précision l'égalité des flotteurs, " il est recommandé de comparer leur différence absolue à un seuil de tolérance (epsilon). Cette valeur epsilon doit être extrêmement petite, mise à l'échelle en fonction de la précision souhaitée.
Par exemple, si sectionID et currentSectionID sont des variables flottantes, l'extrait de code suivant fournit une méthode fiable :
if (Math.abs(sectionID - currentSectionID) < epsilon) { // They are considered 'equal' }
Dans ce contexte, epsilon peut être défini sur 0,00000001 ou sur une valeur personnalisée basée sur la précision requise. En utilisant Math.abs, nous nous assurons que la comparaison est indépendante des signes des opérandes.
Conclusion
Alors que '==' semble être l'égalité désignée opérateur pour les flotteurs, ses lacunes dans la gestion précise de l'imprécision des virgules flottantes le rendent impropre aux comparaisons précises. La solution privilégiée consiste à comparer la différence absolue à un seuil de tolérance approprié, fournissant ainsi des évaluations d'égalité fiables pour les valeurs à virgule flottante en Java.
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!