GCC在启用优化时给出错误的答案

use*_*850 5 c gcc

我有以下C程序

double d = 1.4;
int x;
x = d * 10;
printf("\n\n VALUE = %d " ,x);
Run Code Online (Sandbox Code Playgroud)

我有Uccntu 9.04附带的gcc 4.3.3

我用-O0得到答案为13,但得到正确的答案,即14,具有更高的优化级别

这是一个已知问题或我的代码有问题吗?

小智 9

你不能完全代表1.4使用double,这个值实际上有点滞后或略小(见这个).所以没有"正确"的答案 - 使用round()而不是隐含地截断.


ism*_*ail 9

这是gcc bug#323,实际上这不是bug而是实现细节.