比较浮点变量

时间:2012-11-06 11:12:47

标签: c++ c

  

可能重复:
  Most effective way for float and double comparison
  How dangerous is it to compare floating point values?

我有const float M = 0.000001;float input;。我想不要对它们进行平等检查。但我知道直接检查有副作用M != input。所以,我的问题是如何比较两个浮点值而没有副作用?

2 个答案:

答案 0 :(得分:3)

const double epsilon = 1e-12; 

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

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

答案 1 :(得分:0)

比较花车时,你必须将它们作为&#34; close&#34;进行比较。而不是&#34;相等。&#34;有多种方法可以定义&#34;关闭&#34;根据您的需要。但是,典型的方法可能是:

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()代替==来比较浮点数。