比较浮点变量

comparing float variable

本文关键字:浮点变量 比较      更新时间:2023-10-16

可能的重复:
浮动和双重比较的最有效方法
比较浮点值有多危险?

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

const double epsilon = 1e-12; 
if(fabs(input - M) < epsilon) //input == M
{
    //...
}
if(fabs(input - M) >= epsilon) // input != M
{
    //...
}

比较越小,比较越准确,因此可能会告诉您两个值不相等的可能性越多,而您希望它们被视为相等。Epsilon的值越大,它告诉您结果的可能性就越大,实际上您希望它们不相等。应根据手头任务的具体方式选择Epsilon的价值。

比较浮子时,必须比较它们是"关闭"而不是"相等"。有多种方法可以根据您的需求定义"关闭"。但是,典型的方法可能是:

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