我有一个(让我们说非负)有理数表示为两个整数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
可能会遇到数百个,这将是一个内循环,所以我想要尽可能快速的东西。< / p>