Danger avec la comparaison de doubles
Quel est à votre avis le résultat de l'expression booléenne
suivante :
4.0/3.0 == 1.0 + 1.0/3.0
Vous pensez probablement que c'est true. Ca l'est probablement.
Mais ce n'est pas certain. L'arithmétique flottante n'est pas une
arithmétique exacte et pour des résultats précis,
vous ne devrez jamais faire confiance à une comparaison "d'exacte
égalité" entre flottants. Le problème provient du
fait que certains nombres nécessitent un nombre illimités
de bits pour les représenter avec exactitude. Meme avec un double
de 64 bits il y aura une petite erreur. un aute exemple, meme l'expression
suivante pourrait etre false:
10.0 + 0.1 == 10.1
Parfois, lorsqu'une précision exacte est nécessaire, l'arithmétique
entière doit eter utilisée. C'est une des raisons pour laquelle
Java possède des entiers long codés sur 64 bits. |