¿Por qué veo una variable doble inicializada con algún valor como 21,4 como 21,399999618530273?

Resuelto yesraaj asked hace 15 años • 14 respuestas
double r = 11.631;
double theta = 21.4;

En el depurador, estos se muestran como 11.631000000000000y 21.399999618530273.

¿Cómo puedo evitar esto?

yesraaj avatar Oct 07 '08 14:10 yesraaj
Aceptado

Estos problemas de precisión se deben a la representación interna de los números de coma flotante y no hay mucho que puedas hacer para evitarlos.

Por cierto, imprimir estos valores en tiempo de ejecución a menudo conduce a resultados correctos, al menos utilizando compiladores C++ modernos. Para la mayoría de las operaciones, esto no supone un gran problema.

Konrad Rudolph avatar Oct 07 '2008 07:10 Konrad Rudolph

Me gustó la explicación de Joel , que trata un problema similar de precisión de punto flotante binario en Excel 2007:

¿Ves que hay un montón de 0110 0110 0110 al final? Esto se debe a que 0,1 no tiene una representación exacta en binario ... es un número binario que se repite. Es algo así como 1/3 no tiene representación en decimal. 1/3 es 0,33333333 y tienes que seguir escribiendo 3 para siempre. Si pierdes la paciencia, obtendrás algo inexacto.

Así que puedes imaginar cómo, en decimal, si intentaras hacer 3*1/3 y no tuvieras tiempo para escribir 3 para siempre, el resultado que obtendrías sería 0,99999999, no 1, y la gente se enfadaría con a ti por equivocarte.

Jeff Atwood avatar Oct 07 '2008 08:10 Jeff Atwood