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)
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!