在boost::rational类中,如果我执行
boost::rational<int> r(2,2);
std::cout << r << std::endl;
结果将是1/1
。是否有一种方法可以将其保持为2/2
,而不必在rational类周围编写包装器?理想情况下,我希望这也适用于加法,所以像
boost::rational<int> r(2,2);
boost::rational<int> s(2,2);
std::cout << r + s << std::endl;
会生成4/2
而不是2/1
任何帮助将不胜感激!
你不能,根据设计:
从http://www.boost.org/doc/libs/1_55_0/libs/rational/rational.html最后一个基本操作是将一个有理归一化。无论何时构造一个有理(并在适当的位置分配),都会执行此操作。所有其他操作都小心地将理数保持在规范化状态。规范化的成本相当于一个gcd和两个除法。