1

在 boost::rational 课程中,如果我这样做了

boost::rational<int> r(2,2);
std::cout << r << std::endl;

结果将是1/1。有没有办法保持这一点,2/2而不必围绕理性类编写包装器?理想情况下,我希望这也适用于加法,这样类似

boost::rational<int> r(2,2);
boost::rational<int> s(2,2);
std::cout << r + s << std::endl;

会产生4/2而不是2/1

任何帮助,将不胜感激!

4

1 回答 1

1

根据设计,您不能:

最后的基本操作是使理性正常化。每当构造一个有理数(并就地分配)时,都会执行此操作。所有其他操作都小心地将有理数保持在标准化状态。归一化的成本相当于一个 gcd 和两个除法。

来自http://www.boost.org/doc/libs/1_55_0/libs/rational/rational.html

于 2014-05-08T09:37:56.147 回答