我有一个表示非负有理数 p/q 的结构:
struct rational {
uint64_t p;
uint64_t q; // invariant: always > 0
};
我想将我的有理数乘以 uint64n
并得到一个整数结果,四舍五入。也就是说,我想计算:
uint64_t m = (n * r.p)/r.q;
同时避免n * r.p
. (当然最终结果可能会溢出,这是可以接受的。)
我怎样才能做到这一点?有没有办法在没有高倍数的情况下做到这一点?
(我查看了 boost::rational 但它似乎没有提供此功能。)