我发现了一个有趣的案例,相同的 C++ 代码在不同的系统上产生不同的结果。
#include <cstdio>
int main()
{
int a=20, b=14;
if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!");
else printf("NO!");
}
使用 GCC 4.6.3 在 Ubuntu Linux 12.04 上编译,它输出YES!
使用 GCC 4.6.2 在 Windows 7 上编译它输出NO!
但是,使用:
double c = a*1.0/b*(a+1)/(b+1);
if (c==2) printf("YES!");
...
将返回是!在两台机器上。
任何想法为什么会出现这种差异?这是由编译器版本不匹配引起的(路径级别版本号应该没那么重要)?为什么它实际上输出NO!在 Windows 机器上,而这种情况显然是正确的?