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

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