summaryrefslogtreecommitdiffstats
path: root/sigcore
diff options
context:
space:
mode:
authorBen Boeckel <MathStuf@gmail.com>2008-12-17 00:08:13 -0500
committerBen Boeckel <MathStuf@gmail.com>2008-12-17 00:08:13 -0500
commit47d5c9bee1fd35edb92e9d0dd2069b501480a8d3 (patch)
tree9881c0b6e769e97edbc6ed2eb4e610f1ae722d4b /sigcore
parent41387160723843b7984c2e49afd19c4bbf720041 (diff)
downloadsigen-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.cpp22
-rw-r--r--sigcore/test/TestFraction.cpp12
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()