关于c ++:比较float变量

comparing float variable

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Most effective way for float and double comparison
How dangerous is it to compare floating point values?

我有const float M = 0.000001;float input;。我不想对他们进行平等检查。但我知道直接检查有副作用。那么,我的问题是如何在没有副作用的情况下比较两个浮点值?


1
2
3
4
5
6
7
8
9
10
const double epsilon = 1e-12;

if(fabs(input - M) < epsilon) //input == M
{
    //...
}
if(fabs(input - M) >= epsilon) // input != M
{
    //...
}

epsilon的值越小,比较就越准确,因此它越有可能告诉您两个值不相等,而您希望它们被视为相等。epsilon的值越大,它告诉你结果是相等的概率就越大,而事实上你希望它们不相等。应根据手头任务的具体情况选择epsilon的值。


在比较浮点数时,必须将它们比较为"关闭"而不是"相等"。根据需要,有多种方法可以定义"关闭"。然而,一个典型的方法可能是:

1
2
3
4
5
6
7
8
9
10
11
namespace FloatCmp {

const float Eps = 1e-6f;

bool eq(float a, float b, float eps = Eps) {
  return fabs(a - b) < eps;
}

//etc. for neq, lt, gt, ...

}

然后,使用FloatCmp::eq()而不是==比较浮点数。