diff options
author | Ben Boeckel <MathStuf@gmail.com> | 2008-12-16 20:25:08 -0500 |
---|---|---|
committer | Ben Boeckel <MathStuf@gmail.com> | 2008-12-16 20:25:08 -0500 |
commit | 0f5ff3a39163534d5d7289d3957f4a8d9c54372e (patch) | |
tree | 175aee4cdabecb0261ab35404eaa86795af413fb | |
parent | 36110d3c54b7bfb0878816a0b96c9075e2b1814f (diff) | |
download | sigen-0f5ff3a39163534d5d7289d3957f4a8d9c54372e.tar.gz sigen-0f5ff3a39163534d5d7289d3957f4a8d9c54372e.tar.xz sigen-0f5ff3a39163534d5d7289d3957f4a8d9c54372e.zip |
Direct formula for modulo in fractions
-rw-r--r-- | sigcore/Fraction.cpp | 8 |
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; } |