Bonjour à tous,
Il y a un problème quand je fait la convertion d'un double en un int
par exemple :
Code:
1
2
3
4
5 double a=12; int aa=(int) a; // je trouve aa=11 double b=1; int bb=(int) b; // je trouve bb=0
Merci pour votre aide
Version imprimable
Bonjour à tous,
Il y a un problème quand je fait la convertion d'un double en un int
par exemple :
Code:
1
2
3
4
5 double a=12; int aa=(int) a; // je trouve aa=11 double b=1; int bb=(int) b; // je trouve bb=0
Merci pour votre aide
il faut savoir qu'un flottant n'a pas une représentation exacte en mémoire, ce qui fait que par exemple 1.0 peut valoir en mémoire 0.999999999999 ou 1.00000000000001 selon la précision (d'où l'existence dans la bibliothèque standard de constant tel que FLT_EPS ou DBL_EPS ainsi que d'autre que j'ai plus en mémoire), d'où la cause de ton problème.
si tu veux que 0.9999999999 devienne 1.0, il ne faut pas caster mais arrondir.
Merci,
Oui tu as raison je doit faire arrondissement. J'ai effectué une petite recherche sur la fonction round en c++ mais j'ai pas trouvé.
Par contre il y a ce qui utilise floor(value + 0.5); est ce que cette fonction peut remplacer le rôle de round(value) dans tout les cas?
là pour le coup, je ne sais pas, désolé.
Merci pour ton aide,
Pour le moment ca marche :ccool:
sauf que 1.0 *a* une representatione xacte vu qu'il s'agit de 2^0
1.f === 0x3F800000