Red de conocimiento informático - Computadora portátil - Pregunta de programación en lenguaje C... ¿Por qué la salida es 0.000003 mayor que el número original?

Pregunta de programación en lenguaje C... ¿Por qué la salida es 0.000003 mayor que el número original?

Este es un problema de precisión con los números de punto flotante. Dado que las computadoras usan números binarios para representar decimales, a veces no pueden representar con precisión un decimal (similar a cómo no podemos representar con precisión 1/3 usando un decimal). Tomemos como ejemplo 0,1. 0,1 se puede expresar con precisión en números decimales como 1?×?10^(-1)

Pero los números binarios no. La analogía con la representación decimal de 1/3 es?3?×?10^(-1)?+?3?×?10^(-2)?+?3?×?10^(-3)?+? 3 ?×?10^(-4)?+?...

Otra forma de escribirlo es 0.3333333...

Infinitamente, la representación binaria de 0.1 es ?0 ? ×?2^(-1)?+?0?×?2^(-2)?+?0?×?2^(-3)?+?1?×?2^(-4)?+ ?1?×?2^(-5)?+?0?×?2^(-6)?+?0?×?2^(-7)?+?1?×?2^(-8) ? +?1?×?2^(-9)?+?...

Otra forma de escribirlo es 0.0001100110011...

Infinito. Dado que la memoria de la computadora no es infinita, solo se puede realizar un redondeo cuando el cálculo alcanza una cierta longitud, por lo que el resultado final no es realmente 0,1. De hecho, de acuerdo con el método de escritura anterior y la precisión del tipo flotante, ¿la representación binaria de 0.1 finalmente se convierte en un valor decimal 0.10000000149011612?

Debido al principio anterior, la computadora no puede almacenar con precisión 93,6 como 96,3, sino como un valor aproximado de 96,3 (en realidad es 96,30000305175781). La siguiente figura muestra el método de almacenamiento real del tipo flotante 96.3 en la memoria de la computadora:

Así, a medida que aumenta el número de decimales, se reflejarán las imprecisiones. De la misma manera, si usa printf para aumentar el número de decimales en el resultado, 15.2 también tendrá problemas de precisión (en realidad es 15.199999809265137).

En cuanto a cómo almacenar números de punto flotante en la memoria, la industria tiene su propio conjunto de estándares (estándar IEEE 754, la imagen de arriba se basa en el método de almacenamiento de este estándar). interesado, puedes estudiarlo. ?