我发现了一个有趣的情况,其中相同的C++代码在不同的系统上产生不同的结果。相同的C++'if'语句,Linux/Windows上的不同结果
#include <cstdio>
int main()
{
int a=20, b=14;
if(a*1.0/b*(a+1)/(b+1)==2) printf("YES!");
else printf("NO!");
}
编译在Ubuntu Linux 12.04使用GCC 4.6.3它输出YES!
编译在Windows 7上使用GCC 4.6.2它输出NO!
但是,使用:
double c = a*1.0/b*(a+1)/(b+1);
if (c==2) printf("YES!");
...
将返回YES!两台机器上的。
为什么这种差异出现的任何想法?这是由编译器版本不匹配造成的(pathlevel版本号应该不重要)?为什么它实际上输出不!在Windows机器上,而这种情况显然是正确的?
浮点数! – Skizz
大家应该知道的关于浮点算术的东西:http://docs.sun.com/source/806-3568/ncg_goldberg.html – chris
与floatin点数的精确比较是坏主意 – Tibor