bate's blog

調べたこと実装したことなどを取りとめもなく書きます。

原因半分解明

前の分数テンプレートクラスの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;
	}