代码:
#include <cmath>
void foo(double x, double y)
{
double x1 = cos(x);
double y1 = cos(y);
if (cos(x) != cos(y))
{
std::cout << "Huh?!?\n";
}
if (x1 != y1)
{
std::cout << "HeiHei!!!!!\n";
}
}
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
{
double x = 1.0;
double y = 1.0;
if (x == y)
{
std::cout << "!@#!@#!@#\n";
}
foo(1.0, 1.0);
return 0;
}
解释:
对于常见的intel CPU,浮点寄存器的精度比double高。
所以,实际上,比较时到底相不相等,取决于浮点数存放在哪里。
如果都在寄存器或者都在内存中,都会一样;如果有个在寄存器,有个在内存,则很容易不相等。
这个跟编译器有点关系,但是跟CPU硬件关系更大,这就是为什么liuwenshu在他便携上ubuntn下用gcc编译了结果与windows一样的原因。
你还可以试试,debug和release版运行结果都是不一样的,我想这可能是6楼 ilcs 说结果跟lz不一样的原因。
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment