Boost :: рациональное — предотвратить сокращение по умолчанию (то есть 2/2 до 1/1)?

В 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

Любая помощь будет оценена!

1

Решение

Вы не можете, по замыслу:

Последней фундаментальной операцией является нормализация рациональной. Эта операция выполняется всякий раз, когда рациональное построено (и назначено на место). Все остальные операции стараются поддерживать рациональные значения в нормированном состоянии. Нормализация стоит эквивалент одного gcd и двух делений.

от http://www.boost.org/doc/libs/1_55_0/libs/rational/rational.html

1

Другие решения


По вопросам рекламы [email protected]