Est-ce mal de comparer un double à 0 comme ceci: doubleVariable == 0?
C'est ok pour ce faire?
double doubleVariable=0.0;
if (doubleVariable==0) {
...
}
Ou de ce code aurait à souffrir de potentiels problèmes d'arrondi?
source d'informationauteur Nestor
Vous devez vous connecter pour publier un commentaire.
Nan c'est parfaitement légal si vous allez seulement à comparer à 0 comme le côté droit de comparaison sera automatiquement intégré à double. D'autre part, elle permettrait de donner toutes les erreurs d'arrondi si vous où à comparer à l' == 0.10000001
Vous êtes le meilleur ou la lecture de la discussion à propos de flotter à 0 comparaison ici: Est-il sûr de vérifier les valeurs à virgule flottante pour l'égalité à 0?
Également cette discussion est très instructif sur bizarre précision les problèmes sur des flotteurs: Pourquoi le résultat est différent de ce problème?
c'est à dire en dessous de rendement faux:
Ce que vous avez là est
0
qui est un entier littéral. Il est implicitement converti en double qui vous pourrait représenter avec le double littérale0.0
(la conversion implicite). Il y a ensuite une comparaison entre les deux doubles. Une erreur d'arrondi pourrait causerdoubleVariable
de ne pas être égale à0.0
(par certains autres de maths que vous pourriez faire, et pas seulement de réglage), mais il ne pourrait jamais être une erreur d'arrondi lors de la conversion de l'entier de 0 à double. Le code que vous avez là est totalement sûr, mais je serais favorable à== 0.0
à la place.Essayer:
Si vous êtes juste de comparer une variable de type double contre 0.0 (ou 0), je crois qu'il est sûr de le faire de cette façon parce que je pense que 0 peut être représenté exactement en virgule flottante, mais je ne suis pas sûr à 100%.
En général, l'approche suggérée pour comparer des nombres à virgule flottante est de choisir un "delta" valeur à partir de laquelle vous pourrez envisager de deux doubles être égaux si leur différence est moins que le delta. Cela gère représentation exacte des limites avec des nombres à virgule flottante.
hmm... je pense que tant que le nombre exact fraction binaire de représentation (0) la comparaison est parfaitement valide.
Vous ne devez pas utiliser le double pour une telle comparaison.
double crée problème.
e.g
double n1=0.55
double n2=100
puisdouble ans=n1*n2
devrait être55.0
mais lorsque vous déboguez ans est
55.000000000000007
.if(ans==55.0)
va échouer. dans de tels cas, vous pouvez faire face à un problème.