如果计算结果是8bit的数字量,我们有以下结论:
1. X最大可能的值是 255*60
2. 结果的截断误差在±1/2以内
如果当X为255*60时(最糟糕状况),我们的计算误差仍然小于±1/2,算法的精度就是合格的。
设计算误差为Δ(数量比),为了达到精度,应该有:
255×60×Δ < 1/2
即:Δ 至少要小于
1/(255×60×2)
我们把计算精度进一步提高,取Δ=1/(2^16)
[=1/(256×64×2)]。
显然有等式:
X(1/60
-
Δ) <
X/60
推导之:
<=>
1/60 - 1/(2^16) 1/60 1/60 +
1/(2^16)
<=>
(2^14 - 15)/(15*2^16)
1/60
(2^14 + 15)/(15*2^16)
<=>
(16384 - 15)/(15*2^16)
1/60 =
16384/(15*2^16)
(16384 + 15)/(15*2^16)
我们在
16384±15之间(精度要求范围之内)寻找一个可以被15整除,而且最接近16384的数,它就是:
16380,靠它来把分母上的15约掉。
于是有 1/60 ≈ 16380/(15*2^16) = 1092/2^16, 误差为
4/(15*2^16) 小于1/(2^17)。
1092/(2^16) = (1024+64+4)/(2^16)
= 1/(2^6) + 1/(2^10) + 1/(2^14)
故而:
X/60 ≈ X/(2^6) + X/(2^10) + X/(2^14) (计算误差小于
8bit数的截断误差),至此,如何用程序快速计算X/60,已经显而易见了。