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