我正在32位和64位平台上编译并运行以下程序:
int main()
{
double y = 8.34214e08;
double z = 1.25823e45;
return y * z == 8.34214e08 * 1.25823e45;
}
Run Code Online (Sandbox Code Playgroud)
虽然在64位中结果是预期的(值是相同的,退出代码是非零的)在32位似乎在编译时计算的值,比较的右侧和左侧之间存在一点差异在运行时计算的一面.
这是编译器中的错误还是有逻辑解释?
编辑:这与为什么比较双重和浮动导致意外结果不同?因为这里所有的价值都是双倍的.