Comparaison des valeurs à virgule flottante : les pièges de l'égalité en Java
Malgré la documentation de Java indiquant que == sert d'opérateur d'égalité pour les valeurs flottantes nombres de points, son utilisation à des fins de comparaison peut soulever des inquiétudes. Comme l'illustre l'exemple :
if(sectionID == currentSectionID)
l'appel de l'analyse statique déclenche une erreur : "JAVA0078 Valeurs à virgule flottante comparées à ==". La raison réside dans les limitations inhérentes aux représentations binaires à virgule flottante.
Comparer des valeurs à virgule flottante avec == revient à comparer des pommes avec des oranges. Étant donné que ces valeurs sont des approximations plutôt que des représentations exactes, même des valeurs identiques peuvent donner lieu à des représentations binaires différentes. Par conséquent, == vérifie le contenu des adresses mémoire variables et non les valeurs à virgule flottante sous-jacentes.
L'approche correcte
Pour résoudre ce problème, le L'approche recommandée consiste à comparer les valeurs à virgule flottante en fonction d'un seuil de tolérance. Le test « d'égalité » devient :
if(Math.abs(sectionID - currentSectionID) < epsilon)
où epsilon représente un nombre minuscule comme 0,00000001, adapté au niveau de précision souhaité. Cette méthode évalue si la différence absolue entre les deux valeurs à virgule flottante est inférieure au seuil epsilon. Si tel est le cas, ils sont considérés comme « égaux » dans la tolérance spécifiée.
En conclusion
Bien que l'opérateur == fournisse un moyen simple de comparer des valeurs à virgule flottante, ses lacunes appellent à la prudence. Pour éviter les inexactitudes et les comparaisons peu fiables, la pratique privilégiée consiste à tirer parti de l'approche basée sur la tolérance susmentionnée, garantissant ainsi la précision et la fiabilité des comparaisons à virgule flottante.
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!