我有下面这个C程序 double d = 1.4; int x; x = d * 10; printf("\n\n VALUE = %d " ,x); 我有Ubuntu 9.04自带的gcc 4.3.3 使用-O0编译时,结果为13,但使用更高级别的优化后,得到正确的答案14。 这是已知的问题还是我的代码有问题?
在更高级别的优化中,GCC可能会将两个变量都优化掉,并预先计算要打印的值。在没有进行任何优化的情况下,d的值(以及打印值)将受到浮点数表示的影响,可能不完全等于1.4。尝试这样做: double d = 1.4; int x; x = d * 10; printf("Old = %lf, New = %d\n", d, x);