我有一个(假设是非负的)有理数,表示为两个整数之比a/b
,其中0 <= a < 2^m
和0 < b < 2^n
。我想将其四舍五入为p
分母中只有位的较小表示;也就是说,找到最大的数c/d
,使得c/d <= a/b
,其中0 < d < 2^p
。
示例:如果m=3, n=4, p=2
,我想4/7
向下取整到1/2
,然后5/7
向下取整到2/3
。
我的第一个冲动是将分母右移n-p
,如果弹出 1 则加 1,然后将分子右移相同的量。这可以保证产生小于 的结果a/b
,但不能保证结果的最优性。例如,3/1
四舍五入到2/1
.
理想情况下,我想在没有除法或模数的情况下这样做,但我怀疑这可能不切实际。m
, n
, 并且p
可能会达到数百个,这将在一个内部循环中,所以我想要一些尽可能快的东西。