0

我有一个(假设是非负的)有理数,表示为两个整数之比a/b,其中0 <= a < 2^m0 < 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可能会达到数百个,这将在一个内部循环中,所以我想要一些尽可能快的东西。

4

0 回答 0