Rational numbers with float-like repr¶
- class maelzel.rational.Rat[source]¶
Drop-in replacement to fractions.Fraction with float-like repr
A rational number used to avoid rounding errors.
A
maelzel.rational.Ratis a drop-in replacement forfractions.Fractionwith float-like repr. It can be used whenever a Fraction is used to avoid rounding errors, but itsreprresembles that of a floatIf the package
quicktionsis installed (a fast implementation of Fraction in cython), it is used as a base class of Rat. For that, to test if a Rat is Fraction-like, avoid using isinstance(x, Fraction) but use:>>> from numbers import Rational >>> from maelzel.rational import Rat >>> x = Rat(1, 3) >>> isinstance(x, Rational) True
The same is valid when using type annotations:
import numbers def square(a: numbers.Rational) -> numbers.Rational: return a*a
For all other aspects the documentation for python
fractions.Fractionis valid for this implementation: https://docs.python.org/3/library/fractions.html- classmethod from_float(x)[source]¶
Converts a finite float to a rational number, exactly.
Beware that Fraction.from_float(0.3) != Fraction(3, 10).
- Return type:
- limit_denominator(max_denominator=1000000)[source]¶
Closest Fraction to self with denominator at most max_denominator.
- Return type:
>>> Fraction('3.141592653589793').limit_denominator(10) Fraction(22, 7) >>> Fraction('3.141592653589793').limit_denominator(100) Fraction(311, 99) >>> Fraction(4321, 8765).limit_denominator(10000) Fraction(4321, 8765)