2014-05-08 35 views
1

在升壓::理性類,如果我做boost :: rational - 防止默認減少(即2/2到1/1)?

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

任何幫助,將不勝感激!

+3

我懷疑任何精心設計的合理運算庫將允許這一點。只需在自己的代碼中保留所需的分母即可。 –

+1

出於好奇,你能描述一下這種情況嗎? –

+1

你會期望'1/6 + 1/10'有什麼結果? 4/15或16/60? – interjay

回答

1

你不能按照設計:

最後一個基礎操作是rational規範化。無論何時構建理性(並分配到位),都會執行此操作。所有其他操作都很小心,以保持合理狀態處於正常狀態。規範化成本相當於一個gcd和兩個部門。

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