Bonjour,
Voici le code :
Voici le résultat espéré :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 #include <stdio.h> /* for printf */ #include <math.h> /* for pow */ #include <errno.h> /* for errno */ int main() { double res = -1; /* first calcul */ errno = 0; res = pow(2, 54); printf("errno = %d\n", errno); printf("res = %f\n", res); /* second calcul */ errno = 0; res = pow(2, 54) - 1; printf("errno = %d\n", errno); printf("res = %f\n", res); return 0; }
Voici le résultat obtenu :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ ./main.out errno = 0 res = 18014398509481984.000000 errno = 0 res = 18014398509481983.000000
Remarque : en Python ça fonctionne bien
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 $ ./main.out errno = 0 res = 18014398509481984.000000 errno = 0 res = 18014398509481984.000000
Je ne comprends pas pourquoi pow(2, 54) et pow(2, 54) - 1 donnent le même résultat.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 $ python Python 2.7.14 (default, Jan 22 2018, 12:57:03) [GCC 7.1.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> 2 ** 54 18014398509481984 >>> (2 ** 54) - 1 18014398509481983 >>> quit()
Une explication s'il vous plaît ?
Merci.
Cordialement.
Partager