diff options
Diffstat (limited to 'Lib/fractions.py')
-rw-r--r-- | Lib/fractions.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/Lib/fractions.py b/Lib/fractions.py index e0a024a03b..4bbfc434f7 100644 --- a/Lib/fractions.py +++ b/Lib/fractions.py @@ -429,14 +429,22 @@ class Fraction(numbers.Rational): def _floordiv(a, b): """a // b""" - return math.floor(a / b) + return (a.numerator * b.denominator) // (a.denominator * b.numerator) __floordiv__, __rfloordiv__ = _operator_fallbacks(_floordiv, operator.floordiv) + def _divmod(a, b): + """(a // b, a % b)""" + da, db = a.denominator, b.denominator + div, n_mod = divmod(a.numerator * db, da * b.numerator) + return div, Fraction(n_mod, da * db) + + __divmod__, __rdivmod__ = _operator_fallbacks(_divmod, divmod) + def _mod(a, b): """a % b""" - div = a // b - return a - b * div + da, db = a.denominator, b.denominator + return Fraction((a.numerator * db) % (b.numerator * da), da * db) __mod__, __rmod__ = _operator_fallbacks(_mod, operator.mod) |