2010-12-28 19 views
5

tengo el programa en CGCC da respuesta incorrecta con la optimización activada

double d = 1.4; 
int x; 
x = d * 10; 
printf("\n\n VALUE = %d " ,x); 

siguiente tengo gcc 4.3.3 que viene con Ubuntu 9.04

recibo respuesta como 13 con -O0 pero consigo respuesta correcta es decir, 14 con niveles más altos de optimización

¿Es este un problema conocido o algo malo con mi código?

Respuesta

9

No puede representar 1.4 exactamente usando double, el valor es en realidad un poco lagrer o un poco más pequeño (vea this). Entonces, no hay una respuesta "correcta": use round() en lugar de truncar implícitamente.

4

En niveles de optimización más altos, GCC probablemente optimiza ambas variables y calcula previamente el valor para imprimir. Sin optimización, el valor de d (y por lo tanto el valor de impresión) estará sujeto a la representación en coma flotante, y puede no ser exactamente 1.4. Prueba esto:

double d = 1.4; 
int x; 
x = d * 10; 
printf("Old = %lf, New = %d\n", d, x); 
+0

Pruebe '% .50f' en lugar de'% lf' si desea poder ver el valor real ... –

9

Ésta es gcc bug #323, en realidad esto no es un error, sino un detalle de implementación.

Cuestiones relacionadas