yo estaba tratando de comprender la representación de punto flotante en C usando el código (tanto float
y int
son de 4 bytes en mi máquina):Representación de flotador en C
int x = 3;
float y = *(float*) &x;
printf("%d %e \n", x, y);
Sabemos que la representación binaria de x será el siguiente
00000000000000000000000000000011
y por lo tanto yo hubiera esperado a ser representados de la siguiente manera
bit de signo (primer bit de la izquierda) =
0
Exponente (bits 2-9 de la izquierda) =
0
Mantisa (bits 10-32):
1 + 2^(-22)+2^(-23)
Llevando a y = (-1)^0 * 2^(0-127) * (1+2^(-22) + 2^(-23)) = 5.87747E-39
Mi programa sin embargo imprime
3 4.203895e-45
Eso es, y tiene el valor 4.203895e-45
en lugar de 5.87747E-39
como lo esperaba. Por qué pasó esto. ¿Qué estoy haciendo mal?
P.S. También imprimí los valores directamente desde gdb, por lo que no es un problema con el comando printf.
http://en.wikipedia.org/wiki/Single_precision_floating-point_format – kennytm
¿En qué máquina está intentando esto?¿Cuál es el orden de bytes del host? Big Endian? Little Endian? – Dirk
x86_64 linux machine. Little-endian. – Siggi