Bonjour,

Voici le code :
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 espéré :
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
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 = 18014398509481984.000000
Remarque : en Python ça fonctionne bien
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()
Je ne comprends pas pourquoi pow(2, 54) et pow(2, 54) - 1 donnent le même résultat.
Une explication s'il vous plaît ?

Merci.
Cordialement.