Solución:
Los números de coma flotante en C usan codificación IEEE 754.
Este tipo de codificación utiliza un signo, un significado y un exponente.
Debido a esta codificación, muchos números tendrán pequeños cambios para permitir su almacenamiento.
Además, el número de dígitos significativos puede cambiar ligeramente ya que es una representación binaria, no decimal.
Precisión simple (flotante) le da 23 bits de significando, 8 bits de exponente y 1 bit de signo.
La precisión doble (doble) le da 52 bits de significando, 11 bits de exponente y 1 bit de signo.
¿Los dobles siempre tienen 16 cifras significativas mientras que los flotadores siempre tienen 7 cifras significativas?
No. Los dobles siempre tienen 53 bits y los flotadores siempre tienen 24 bits (excepto para valores desnormales, infinitos y NaN, pero esos son temas para una pregunta diferente). Estos son formatos binarios y solo puede hablar claramente sobre la precisión de sus representaciones en términos de dígitos binarios (bits).
Esto es análogo a la cuestión de cuántos dígitos se pueden almacenar en un entero binario: un entero de 32 bits sin signo puede almacenar enteros de hasta 32 bits, que no se asignan con precisión a ningún número de dígitos decimales: todos los enteros de hasta Se pueden almacenar 9 dígitos decimales, pero también se pueden almacenar muchos números de 10 dígitos.
¿Por qué los dobles no tienen 14 cifras significativas?
La codificación de un doble usa 64 bits (1 bit para el signo, 11 bits para el exponente, 52 bits significativos explícitos y un bit implícito), que es doble el número de bits utilizados para representar un flotante (32 bits).
flotante: 23 bits de significando, 8 bits de exponente y 1 bit de signo.
doble: 52 bits de significado, 11 bits de exponente y 1 bit de signo.