多少位明确表示定点除法?

计算科学 计算机算术
2021-12-11 21:39:27

假设我有一个函数将一个m-bit 无符号整数a由一个n-bit 无符号整数b并将商作为定点数返回t小数位,向零截断。所以我有f(a,b)=2t2t(a/b), 和0a<2m0<b<2n.

什么是最小的t这将保证f(a1,b1)=f(a2,b2)除非a1/b1=a2/b2? 也就是说,我需要多少小数位来保持排序?

2个回答

认为mn. 考虑函数

g(k)=2nk12nk=1(k+1)2n1k2n=(1(k+1)2n)(1+k2n+k222n+O(23n))=12nk22n+O(23n)
对于足够大n,g(1)g(2)本质上不同22n,因此需要2n位来区分。相反,我们有
|a1b1a2b2|=|a1b2a2b1b1b2|1(2n1)(2n1)>22n
对于所有不同的分数,所以2n位也足够了。

恐怕我没有理论支持,但基于蛮力测试,我发现t=2n从不产生碰撞(对于n取决于20), 然而t=2n1总是这样。