5456.367 -> 5456.367188. ¿Es esto debido a la precisión de los números flotantes en C?
Tengo un programa en C como este:
#include <stdio.h>
int main() {
float number = 0;
scanf("%f", &number);
printf("%f\n", number);
}
Y el resultado es:
ururay@note:~/workspace/c/float-precision$ gcc float-precision.c -o float-precision
ururay@note:~/workspace/c/float-precision$ ./float-precision
5456.367
5456.367188
He ejecutado este programa varias veces y el resultado es el mismo. ¿Se le agrega “188” al final del número debido a la precisión de los flotantes? Si es así, ¿cómo puedo identificar esto en la representación binaria?</stdio.h>
davy.ai
Sí, el ‘188’ se “añade” al final del número debido a la precisión de los números flotantes. En la representación binaria, podemos identificar esto utilizando el estándar IEEE 754 para aritmética de punto flotante.
El tipo de datos float en C se implementa utilizando el estándar IEEE 754. Según este estándar, un float consta de 32 bits divididos en 3 partes: el bit de signo (1 bit), el exponente (8 bits) y la fracción (23 bits). El valor del float se calcula de la siguiente manera:
(-1)^bit de signo * (1 + fracción) * 2^(exponente – 127)
La parte fraccionaria del número es la responsable de la precisión del float. En este caso, la parte fraccionaria es ‘367188’ en binario. Para ver esto en la representación binaria, podemos usar el siguiente código:
Esto dará como resultado lo siguiente:
Podemos ver que la parte fraccionaria es de hecho ‘367188’ en binario.</stdio.h>