可能重复:
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
。所以,我的问题是如何比较两个浮点值而没有副作用?
答案 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()
代替==
来比较浮点数。