我们如何使用定点运算来计算 1/3?
How can we calculate 1/3 by using fixed-point arithmetic?
我对定点运算特别是除法运算很感兴趣。
然而,许多站点解释了仅使用二次幂除法(即位移)的方法。
如果分母不是二次方怎么办?
例如,我们如何计算无符号 16 位算术中的 1/3?
假设右4位是小数部分
1 是 0000 0000 0001 0000
3 是 0000 0000 0011 0000
如果分母不是 2 的幂,则结果很可能是 无限级数。例如:
因为你只有 4 个小数位,结果将是:
您可以通过以下方式计算:
- 取一个只有 MSB 集的值:
1000 0000 0000 0000
- 除以分母
- 右移 整数位数减 1。这相当于在定点表示
中将初始值转换为1
对于上面的例子:
[1000 0000 0000 0000] / 3 = 0010 1010 1010 1010
[0010 1010 1010 1010] >> (12 - 1) = 0000 0000 0000 0101
我对定点运算特别是除法运算很感兴趣。 然而,许多站点解释了仅使用二次幂除法(即位移)的方法。
如果分母不是二次方怎么办? 例如,我们如何计算无符号 16 位算术中的 1/3? 假设右4位是小数部分
1 是 0000 0000 0001 0000
3 是 0000 0000 0011 0000
如果分母不是 2 的幂,则结果很可能是 无限级数。例如:
因为你只有 4 个小数位,结果将是:
您可以通过以下方式计算:
- 取一个只有 MSB 集的值:
1000 0000 0000 0000
- 除以分母
- 右移 整数位数减 1。这相当于在定点表示 中将初始值转换为1
对于上面的例子:
[1000 0000 0000 0000] / 3 = 0010 1010 1010 1010
[0010 1010 1010 1010] >> (12 - 1) = 0000 0000 0000 0101