Bonjour à tous
Y a-t-il une explication au fait que l'expression suivante :
(int) (10.2/0.1)
retourne 101 ? :?
Merci d'avance
Version imprimable
Bonjour à tous
Y a-t-il une explication au fait que l'expression suivante :
(int) (10.2/0.1)
retourne 101 ? :?
Merci d'avance
Oui! 10.2/0.1 est une expression constante de type double. Les opérations mathématiques mettant en jeu des nombres flottant ne sont par définition pas exacts. 10.2/0.1 qui vaut 102 en mathématiques, peut valoir ici 101.99999999<...> à cause de problèmes d'arrondis. Lorsqu'on caste un double en entier de type int, cela revient à tronquer la partie fractionnaire. Et (int) 101.999999<...> vaut 101.Citation:
Envoyé par planeur2007
Thierry
Si le cast tronque, comment fait-on pour arrondir au plus proche ?
floor(n+0.5) ?
Tu y est presque ;)
http://c.developpez.com/faq/c/?page=..._round_correct
Est-ce que quelqu'un peut m'expliquer pourquoi faire un test dans cette solution. A mon avis floor(x+0.5) et ceil(x-0.5) doivent donner le même résultat pour des données positives comme négatives.Citation:
Envoyé par jln13
Oui, les approximations de la représentation interne des flottants.Citation:
Envoyé par planeur2007
Code:
1
2
3
4
5
6
7
8 #include <stdio.h> int main (void) { double x = 10.2 / 0.1; printf ("%.15f %d\n", x, (int) x); return 0; }
Code:
1
2
3
4 101.999999999999990 101 Press ENTER to continue.