В boost :: рациональном классе, если я делаю
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
Любая помощь будет оценена!
Вы не можете, по замыслу:
Последней фундаментальной операцией является нормализация рациональной. Эта операция выполняется всякий раз, когда рациональное построено (и назначено на место). Все остальные операции стараются поддерживать рациональные значения в нормированном состоянии. Нормализация стоит эквивалент одного gcd и двух делений.
от http://www.boost.org/doc/libs/1_55_0/libs/rational/rational.html