【开发日记】计算精度

一个异常,用了两天的时间查出原因,原来就是一个开根号运算造成的!其根源是计算底数的时候出现了负数!然后底数的计算是通过图像平方和积分图的a+d-b-c得到的,这一步的结果理所当然的应该是非负的!但结果就出现了负数!最终原因是double的精度问题,某些像素点位置的积分图a+d-b-c值竟然有e-6的误差,然后整个平方和积分图的数量级大概是e+10,刚好是double的有效数字精度16位!这说明a+d和b-c的值非常相近(相差小于double的精度了),导致相减时出现误差了!该死的平方和积分图,数量级太TM大了!


开根号的底数必须确保大于0!!!不仅开根号,除数不能为0、exp和log底数不能为0这些都会出现NaN或者Inf值,必须对运算值加上零阈值!


重要的事情说三遍:


可能出现无意义运算的地方必须千万注意!

可能出现无意义运算的地方必须千万注意!

可能出现无意义运算的地方必须千万注意!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值