我知道如何检查两个浮点数是否almost
相等,简单代码:
bool compare(double a, double b)
{
if(fabs(a - b) < (1.0 / 10000000))
return true;
else
return false;
}
但是当我有一些随机数据时,让我们说9.0和9.5,或者9.4我想把它们视为相同的数字,怎么做?我的意思是,他们不相等,但我可以允许一些小错误+/- 0.5。有什么想法吗?
有了这个错误,我可以处理数字:
9.1 and 9.0
3.1 and 3.6
-4.2 and -4.6
等于
答案 0 :(得分:6)
在不知道这些数字中可能存在哪些计算错误以及应用目的可接受的情况下,不可能知道使用什么容差来接受不等数字相等。
一些简单的算术运算可能会产生无限错误,并且数百万算术运算也可能产生没有错误的结果。计算可能发生的错误必须单独进行计算;没有一般规则。对于可接受的类型错误甚至没有一般规则:某些计算会导致与结果成比例的错误(相对错误),有些导致错误是绝对的,有些结果在错误中,这些错误是复杂的数据函数,甚至可能不会出现在被检查的值中。因此,即使是在给定误差量参数的情况下与相对误差进行比较的例程也不足以供一般使用。
此外,接受不相等的数字可以减少假阴性(如果使用精确数学计算的数字本身相等的情况是不相等的,因为使用了近似算术),代价是增加误报(即使它们接受数字相等)实际上是不平等的)。一些应用程序可以容忍这一点。有些人不能。
如果您需要更多指导,您需要进一步解释您在做什么以及您的目标是什么。
答案 1 :(得分:5)
如果我理解你的话,这段代码就会这样做:
bool compare(double a, double b, double precision)
{
if(fabs(a - b) < precision)
return true;
else
return false;
}