原因半分解明
前の分数テンプレートクラスのoperator=が下記のもの。
// TFractionクラスの一部 // 演算子 TFraction<T>& operator=( TFraction<T> t ) { m_numerator = t.GetNumerator(); m_denominator = t.GetDenominator(); m_sign = t.GetSign(); return *this; }
分子が0でも乗算または除算をするたびに分母が大きくなる。
0/123456789のような形になり、終にはオーバーフローすると予想。
そこで、分子が0の時はこまめに分母を1にして0/1の形にする。
プログラム修正の結果は上手く動いたが、予想が当たったかどうかは別の話。
// TFractionの一部 // 演算子 TFraction<T>& operator=( TFraction<T> t ) { m_numerator = t.GetNumerator(); m_denominator = t.GetDenominator(); m_sign = t.GetSign(); // 修正部分 ------------------------------ if( m_numerator == 0 ) m_denominator = 1; // ------------------------------ 修正部分 return *this; }