Maison > Java > javaDidacticiel > Pourquoi utiliser `==` pour comparer des nombres à virgule flottante en Java est-il problématique ?

Pourquoi utiliser `==` pour comparer des nombres à virgule flottante en Java est-il problématique ?

Barbara Streisand
Libérer: 2024-12-24 20:41:10
original
512 Les gens l'ont consulté

Why Is Using `==` to Compare Floating-Point Numbers in Java Problematic?

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

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

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!

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