summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sigcore/Fraction.cpp8
1 files changed, 2 insertions, 6 deletions
diff --git a/sigcore/Fraction.cpp b/sigcore/Fraction.cpp
index 9c4fa1a9..232789fb 100644
--- a/sigcore/Fraction.cpp
+++ b/sigcore/Fraction.cpp
@@ -127,12 +127,8 @@ Sigcore::Fraction Sigcore::Fraction::operator/(const Fraction& rhs) const
Sigcore::Fraction Sigcore::Fraction::operator%(const Fraction& rhs) const
{
- // FIXME: can it be done directly?
- Fraction ans(rhs);
- while (*this < ans)
- ans -= *this;
- while (ans <= 0)
- ans += *this;
+ // 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;
}