C++ boost::rational-防止默认值减少(即2/2到1/1)?

C++ boost::rational-防止默认值减少(即2/2到1/1)?,c++,boost,rational-number,C++,Boost,Rational Number,在boost::rational类中,如果我这样做 boost::rational<int> r(2,2); std::cout << r << std::endl; 将产生4/2而不是2/1 任何帮助都将不胜感激 根据设计,你不能: 最后一个基本操作是规范化有理数。每当构造rational(并在适当位置分配)时,就会执行此操作。所有其他操作都会小心地将有理数保持在规范化状态。正常化成本相当于一个gcd和两个部门 从来看,我怀疑任何设计良好的rational

在boost::rational类中,如果我这样做

boost::rational<int> r(2,2);
std::cout << r << std::endl;
将产生
4/2
而不是
2/1

任何帮助都将不胜感激

根据设计,你不能:

最后一个基本操作是规范化有理数。每当构造rational(并在适当位置分配)时,就会执行此操作。所有其他操作都会小心地将有理数保持在规范化状态。正常化成本相当于一个gcd和两个部门


来看,我怀疑任何设计良好的rational算术库都不会允许这样做。只需在您自己的代码中保留所需的分母。出于好奇,您能否描述一下需要使用分母的上下文?您希望从
1/6+1/10
中得到什么结果?4/15或16/60?@interjay
8/30
显然;-)上下文将表示音乐时间签名,这不会减少。两个4/4的度量值加在一起得到一个8/4的度量值。不过,我还没有想清楚,我发现对于不同分母的情况,没有明确的答案。
boost::rational<int> r(2,2);
boost::rational<int> s(2,2);
std::cout << r + s << std::endl;