特殊二进制定点数的简便运算
在计算机二进制运算逻辑实现中,不能整除的数的除法实现是比较复杂的,往往用了大量的逻辑资源反而达不到需要的效果,例如X/255,如果运用通用的逻辑实现需要用到牛顿迭代做很多次迭代才能达到需要的精度。但是如果我们运用无限循环小数的属性,可以非常简单的实现2n*X/255的运算。为了使演示简单,我们用8位整数,8位小数无符号定点数为例子。
为了容易理解,首先我们以十进制的数为例子,对于一位十进制整数1/9=0.11111111…;
2/9=0.22222222…;
3/9=0.33333333…;
4/9=0.44444444…;
5/9=0.55555555…;
6/9=0.66666666…;
7/9=0.77777777…;
8/9=0.8888888…;
同样对于8位的二进制整数具有同样的性质:
1/255=b00000000.0000000100000001…;
2/255=b00000000.0000001000000010…;
3/255=b00000000.0000001100000011…;
…
254/255=b00000000.1111111011111110…;
所以对于2n*X/255的运算可以直接把X/255的值按照上面的例子书写,然后左移2n位。