我的C ++代码中有一个奇怪的错误:
float cosTheta = someFunction();
cout << cosTheta << endl; // prints 1 on the console
if (cosTheta == 1) { // doesn't enter this condition
cout << "it is 1" << endl;
}
float sinTheta = sqrt(1 - pow(cosTheta, 2));
return (someVariable * sinTheta);
问题是:cosTheta是1,但它没有进入条件,虽然它在屏幕上打印1。当我打印返回的值时,它应该是0,因为cosTheta是1,所以sinTheta得到0而返回值得到0,但我得到0.0953562 ......
我在Java中测试了相同的代码,结果我得到0。
答案 0 :(得分:2)
您不应将浮点数与==
进行比较。浮点运算中的舍入误差意味着您应该选择精度EPSILON
(适合您的情况)并使用它如下:
const float EPSILON = 0.00001;
if( fabs(cosTheta - 1) < EPSILON ) {
cout << "It is approximately 1\n";
}