diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-12-17 00:08:13 -0500 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-12-17 00:08:13 -0500 |
commit | 47d5c9bee1fd35edb92e9d0dd2069b501480a8d3 (patch) | |
tree | 9881c0b6e769e97edbc6ed2eb4e610f1ae722d4b /sigcore | |
parent | 41387160723843b7984c2e49afd19c4bbf720041 (diff) | |
download | sigen-47d5c9bee1fd35edb92e9d0dd2069b501480a8d3.tar.gz sigen-47d5c9bee1fd35edb92e9d0dd2069b501480a8d3.tar.xz sigen-47d5c9bee1fd35edb92e9d0dd2069b501480a8d3.zip |
Fraction operations don't reduce internally anymore
Diffstat (limited to 'sigcore')
-rw-r--r-- | sigcore/Fraction.cpp | 22 | ||||
-rw-r--r-- | sigcore/test/TestFraction.cpp | 12 |
2 files changed, 12 insertions, 22 deletions
diff --git a/sigcore/Fraction.cpp b/sigcore/Fraction.cpp index 232789fb..e6e16fc7 100644 --- a/sigcore/Fraction.cpp +++ b/sigcore/Fraction.cpp @@ -67,7 +67,7 @@ void Sigcore::Fraction::reduce() int j = m_denominator; if (i < 0) i = -i; - while (i - j) + while (i != j) (i > j) ? (i -= j) : (j -= i); m_numerator /= i; m_denominator /= i; @@ -99,38 +99,28 @@ Sigcore::Fraction::operator double() const Sigcore::Fraction Sigcore::Fraction::operator+(const Fraction& rhs) const { - Fraction ans((m_numerator * rhs.m_denominator) + (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); - ans.reduce(); - return ans; + return Fraction((m_numerator * rhs.m_denominator) + (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); } Sigcore::Fraction Sigcore::Fraction::operator-(const Fraction& rhs) const { - Fraction ans((m_numerator * rhs.m_denominator) - (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); - ans.reduce(); - return ans; + return Fraction((m_numerator * rhs.m_denominator) - (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); } Sigcore::Fraction Sigcore::Fraction::operator*(const Fraction& rhs) const { - Fraction ans(m_numerator * rhs.m_numerator, m_denominator * rhs.m_denominator); - ans.reduce(); - return ans; + return Fraction(m_numerator * rhs.m_numerator, m_denominator * rhs.m_denominator); } Sigcore::Fraction Sigcore::Fraction::operator/(const Fraction& rhs) const { - Fraction ans(m_numerator * rhs.m_denominator, m_denominator * rhs.m_numerator); - ans.reduce(); - return ans; + return Fraction(m_numerator * rhs.m_denominator, m_denominator * rhs.m_numerator); } Sigcore::Fraction Sigcore::Fraction::operator%(const Fraction& rhs) const { // Formula from Kevin Kofler - Fraction ans((m_numerator * rhs.m_denominator) % (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); - ans.reduce(); - return ans; + return Fraction((m_numerator * rhs.m_denominator) % (m_denominator * rhs.m_numerator), m_denominator * rhs.m_denominator); } Sigcore::Fraction& Sigcore::Fraction::operator+=(const Fraction& rhs) diff --git a/sigcore/test/TestFraction.cpp b/sigcore/test/TestFraction.cpp index e8818ba0..ec6fab37 100644 --- a/sigcore/test/TestFraction.cpp +++ b/sigcore/test/TestFraction.cpp @@ -99,8 +99,8 @@ void TestFraction::addition() frac1 = frac1 + frac2; - QCOMPARE(frac1.numerator(), 11); - QCOMPARE(frac1.denominator(), 8); + QCOMPARE(frac1.numerator(), 44); + QCOMPARE(frac1.denominator(), 32); } void TestFraction::subtraction() @@ -110,8 +110,8 @@ void TestFraction::subtraction() frac1 = frac1 - frac2; - QCOMPARE(frac1.numerator(), -1); - QCOMPARE(frac1.denominator(), 8); + QCOMPARE(frac1.numerator(), -4); + QCOMPARE(frac1.denominator(), 32); } void TestFraction::multiplication() @@ -132,8 +132,8 @@ void TestFraction::division() frac1 = frac1 / frac2; - QCOMPARE(frac1.numerator(), 5); - QCOMPARE(frac1.denominator(), 6); + QCOMPARE(frac1.numerator(), 20); + QCOMPARE(frac1.denominator(), 24); } void TestFraction::modulo() |