浮点错误

时间:2014-04-04 18:57:23

标签: java c++ floating-point cout

我的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。

1 个答案:

答案 0 :(得分:2)

您不应将浮点数与==进行比较。浮点运算中的舍入误差意味着您应该选择精度EPSILON(适合您的情况)并使用它如下:

const float EPSILON = 0.00001;

if( fabs(cosTheta - 1) < EPSILON ) {
    cout << "It is approximately 1\n";
}