Maison > Java > javaDidacticiel > Pourquoi la comparaison directe d'égalité en virgule flottante en Java est-elle problématique et comment pouvons-nous comparer correctement les flotteurs ?

Pourquoi la comparaison directe d'égalité en virgule flottante en Java est-elle problématique et comment pouvons-nous comparer correctement les flotteurs ?

Mary-Kate Olsen
Libérer: 2024-12-21 15:42:10
original
283 Les gens l'ont consulté

Why is Direct Floating-Point Equality Comparison in Java Problematic, and How Can We Correctly Compare Floats?

Pièges de la comparaison d'égalité à virgule flottante en Java

Les développeurs Java rencontrent souvent de la confusion lorsqu'ils utilisent l'opérateur d'égalité (==) pour comparer les valeurs flottantes -numéros de points. Bien que la documentation indique sa validité pour la comparaison à virgule flottante, les outils d'analyse statique signalent ces comparaisons comme incorrectes.

Pourquoi == est-il problématique pour les flottants ?

Nombres à virgule flottante représentent des valeurs décimales au format binaire avec un certain niveau de précision. En raison de cette imprécision inhérente, le résultat des calculs en virgule flottante peut contenir de minuscules erreurs. Ces erreurs peuvent conduire à des comparaisons inattendues lors des contrôles d'égalité.

La bonne façon de comparer les flotteurs

Pour atténuer les pièges de l'égalité en virgule flottante, il est recommandé d'utiliser plutôt une approche basée sur la tolérance. La solution préconisée est de tester si la différence absolue entre les deux flotteurs est inférieure à un seuil prédéfini, appelé epsilon. Voici le code recommandé :

if(Math.abs(sectionID - currentSectionID) < epsilon)
Copier après la connexion

Epsilon est un très petit nombre, généralement autour de 0,00000001, qui représente le niveau d'imprécision acceptable. Cette approche tolère des erreurs mineures dans les calculs à virgule flottante, garantissant ainsi des contrôles d'égalité précis. En utilisant cette comparaison modifiée, vous pouvez éviter les pièges liés à l'utilisation de == pour l'égalité à 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!

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