Salut,
Non, l'opérateur == est bel et bien l'opérateur qui permet de comparer deux valeurs et de s'assurer qu'elles sont égales.
C'est l'opérateur != qui s'assure que deux valeurs soient différentes
Cependant, si tu réglais ton compilateur pour te donner un maximum d'avertissements (il est vraiment préférable de le faire, et de veiller autant que possible à résoudre les avertissements qu'il donne
![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
), tu obtiendrait un avertissement du genre de
Je te passe les détails techniques (qui ont par ailleurs été exposés à de nombreuses reprises sur le forum, une petite recherche devrait te permettre de les retrouver, si cela t'intéresse
![:D](https://www.developpez.net/forums/images/smilies/icon_biggrin.gif)
) mais, en gros, entre les problèmes de conversion de binaire en décimal (et inversement) et le fait que les double soient représentés sous la forme d'une mantisse et d'un exposant, il y a toujours une part d'imprécision dans la valeur que l'on obtient.
Il faut donc toujours prendre cette imprécision (l'epsylon ! ) en compte lorsque tu souhaites vérifier l'égalité de deux doubles, surtout si leur valeur a été obtenue par calcul!
Tu peux obtenir l'epsylon * défini pour un type donné grâce à fonction epsylon() de la classe template fournie par le standard std::numeric_limits.
Ta comparaison devrait donc prendre la forme de
1 2 3 4 5
| if( Y[i][j][t]<=0.0 + std::numeric_limits<double>.epsylon() ||
Y[i][j][t]>=0.0 - std::numeric_limits<double>.epsylon() )
{
// ce qu'il faut faire
} |
* L'epsylon est la plus valeur qui vérifiera x- epsylon == x == x + epsylon
![;)](https://www.developpez.net/forums/images/smilies/icon_wink.gif)
Partager