je tentais de comprendre la représentation à virgule flottante en C en utilisant ce code (les deux float
et int
sont 4 octets sur ma machine):Représentation du flotteur en C
int x = 3;
float y = *(float*) &x;
printf("%d %e \n", x, y);
Nous savons que la représentation binaire de x seront les suivants
00000000000000000000000000000011
Par conséquent, je me serais attendu à y être représentée comme suit
bit de signe (premier bit de gauche à droite) =
0
Exponent (bits 2-9 de gauche à droite) =
0
mantisse (bits 10-32):
1 + 2^(-22)+2^(-23)
menant à y = (-1)^0 * 2^(0-127) * (1+2^(-22) + 2^(-23)) = 5.87747E-39
Mon programme imprime cependant
3 4.203895e-45
C'est, y a la valeur 4.203895e-45
au lieu de 5.87747E-39
comme je m'y attendais. Pourquoi cela arrive-t-il. Qu'est-ce que je fais mal?
P.S. J'ai également imprimé les valeurs directement à partir de gdb, donc ce n'est pas un problème avec la commande printf.
http://en.wikipedia.org/wiki/Single_precision_floating-point_format – kennytm
Sur quelle machine essayez-vous cela?Quelle est l'ordre des octets de l'hôte? Big endian? Petit endian? – Dirk
x86_64 machine linux. Petit endian. – Siggi