17db96d56Sopenharmony_ci:mod:`fractions` --- Rational numbers
27db96d56Sopenharmony_ci=====================================
37db96d56Sopenharmony_ci
47db96d56Sopenharmony_ci.. module:: fractions
57db96d56Sopenharmony_ci   :synopsis: Rational numbers.
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci.. moduleauthor:: Jeffrey Yasskin <jyasskin at gmail.com>
87db96d56Sopenharmony_ci.. sectionauthor:: Jeffrey Yasskin <jyasskin at gmail.com>
97db96d56Sopenharmony_ci
107db96d56Sopenharmony_ci**Source code:** :source:`Lib/fractions.py`
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci--------------
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ciThe :mod:`fractions` module provides support for rational number arithmetic.
157db96d56Sopenharmony_ci
167db96d56Sopenharmony_ci
177db96d56Sopenharmony_ciA Fraction instance can be constructed from a pair of integers, from
187db96d56Sopenharmony_cianother rational number, or from a string.
197db96d56Sopenharmony_ci
207db96d56Sopenharmony_ci.. class:: Fraction(numerator=0, denominator=1)
217db96d56Sopenharmony_ci           Fraction(other_fraction)
227db96d56Sopenharmony_ci           Fraction(float)
237db96d56Sopenharmony_ci           Fraction(decimal)
247db96d56Sopenharmony_ci           Fraction(string)
257db96d56Sopenharmony_ci
267db96d56Sopenharmony_ci   The first version requires that *numerator* and *denominator* are instances
277db96d56Sopenharmony_ci   of :class:`numbers.Rational` and returns a new :class:`Fraction` instance
287db96d56Sopenharmony_ci   with value ``numerator/denominator``. If *denominator* is :const:`0`, it
297db96d56Sopenharmony_ci   raises a :exc:`ZeroDivisionError`. The second version requires that
307db96d56Sopenharmony_ci   *other_fraction* is an instance of :class:`numbers.Rational` and returns a
317db96d56Sopenharmony_ci   :class:`Fraction` instance with the same value.  The next two versions accept
327db96d56Sopenharmony_ci   either a :class:`float` or a :class:`decimal.Decimal` instance, and return a
337db96d56Sopenharmony_ci   :class:`Fraction` instance with exactly the same value.  Note that due to the
347db96d56Sopenharmony_ci   usual issues with binary floating-point (see :ref:`tut-fp-issues`), the
357db96d56Sopenharmony_ci   argument to ``Fraction(1.1)`` is not exactly equal to 11/10, and so
367db96d56Sopenharmony_ci   ``Fraction(1.1)`` does *not* return ``Fraction(11, 10)`` as one might expect.
377db96d56Sopenharmony_ci   (But see the documentation for the :meth:`limit_denominator` method below.)
387db96d56Sopenharmony_ci   The last version of the constructor expects a string or unicode instance.
397db96d56Sopenharmony_ci   The usual form for this instance is::
407db96d56Sopenharmony_ci
417db96d56Sopenharmony_ci      [sign] numerator ['/' denominator]
427db96d56Sopenharmony_ci
437db96d56Sopenharmony_ci   where the optional ``sign`` may be either '+' or '-' and
447db96d56Sopenharmony_ci   ``numerator`` and ``denominator`` (if present) are strings of
457db96d56Sopenharmony_ci   decimal digits (underscores may be used to delimit digits as with
467db96d56Sopenharmony_ci   integral literals in code).  In addition, any string that represents a finite
477db96d56Sopenharmony_ci   value and is accepted by the :class:`float` constructor is also
487db96d56Sopenharmony_ci   accepted by the :class:`Fraction` constructor.  In either form the
497db96d56Sopenharmony_ci   input string may also have leading and/or trailing whitespace.
507db96d56Sopenharmony_ci   Here are some examples::
517db96d56Sopenharmony_ci
527db96d56Sopenharmony_ci      >>> from fractions import Fraction
537db96d56Sopenharmony_ci      >>> Fraction(16, -10)
547db96d56Sopenharmony_ci      Fraction(-8, 5)
557db96d56Sopenharmony_ci      >>> Fraction(123)
567db96d56Sopenharmony_ci      Fraction(123, 1)
577db96d56Sopenharmony_ci      >>> Fraction()
587db96d56Sopenharmony_ci      Fraction(0, 1)
597db96d56Sopenharmony_ci      >>> Fraction('3/7')
607db96d56Sopenharmony_ci      Fraction(3, 7)
617db96d56Sopenharmony_ci      >>> Fraction(' -3/7 ')
627db96d56Sopenharmony_ci      Fraction(-3, 7)
637db96d56Sopenharmony_ci      >>> Fraction('1.414213 \t\n')
647db96d56Sopenharmony_ci      Fraction(1414213, 1000000)
657db96d56Sopenharmony_ci      >>> Fraction('-.125')
667db96d56Sopenharmony_ci      Fraction(-1, 8)
677db96d56Sopenharmony_ci      >>> Fraction('7e-6')
687db96d56Sopenharmony_ci      Fraction(7, 1000000)
697db96d56Sopenharmony_ci      >>> Fraction(2.25)
707db96d56Sopenharmony_ci      Fraction(9, 4)
717db96d56Sopenharmony_ci      >>> Fraction(1.1)
727db96d56Sopenharmony_ci      Fraction(2476979795053773, 2251799813685248)
737db96d56Sopenharmony_ci      >>> from decimal import Decimal
747db96d56Sopenharmony_ci      >>> Fraction(Decimal('1.1'))
757db96d56Sopenharmony_ci      Fraction(11, 10)
767db96d56Sopenharmony_ci
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci   The :class:`Fraction` class inherits from the abstract base class
797db96d56Sopenharmony_ci   :class:`numbers.Rational`, and implements all of the methods and
807db96d56Sopenharmony_ci   operations from that class.  :class:`Fraction` instances are :term:`hashable`,
817db96d56Sopenharmony_ci   and should be treated as immutable.  In addition,
827db96d56Sopenharmony_ci   :class:`Fraction` has the following properties and methods:
837db96d56Sopenharmony_ci
847db96d56Sopenharmony_ci   .. versionchanged:: 3.2
857db96d56Sopenharmony_ci      The :class:`Fraction` constructor now accepts :class:`float` and
867db96d56Sopenharmony_ci      :class:`decimal.Decimal` instances.
877db96d56Sopenharmony_ci
887db96d56Sopenharmony_ci   .. versionchanged:: 3.9
897db96d56Sopenharmony_ci      The :func:`math.gcd` function is now used to normalize the *numerator*
907db96d56Sopenharmony_ci      and *denominator*. :func:`math.gcd` always return a :class:`int` type.
917db96d56Sopenharmony_ci      Previously, the GCD type depended on *numerator* and *denominator*.
927db96d56Sopenharmony_ci
937db96d56Sopenharmony_ci   .. versionchanged:: 3.11
947db96d56Sopenharmony_ci      Underscores are now permitted when creating a :class:`Fraction` instance
957db96d56Sopenharmony_ci      from a string, following :PEP:`515` rules.
967db96d56Sopenharmony_ci
977db96d56Sopenharmony_ci   .. versionchanged:: 3.11
987db96d56Sopenharmony_ci      :class:`Fraction` implements ``__int__`` now to satisfy
997db96d56Sopenharmony_ci      ``typing.SupportsInt`` instance checks.
1007db96d56Sopenharmony_ci
1017db96d56Sopenharmony_ci   .. attribute:: numerator
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ci      Numerator of the Fraction in lowest term.
1047db96d56Sopenharmony_ci
1057db96d56Sopenharmony_ci   .. attribute:: denominator
1067db96d56Sopenharmony_ci
1077db96d56Sopenharmony_ci      Denominator of the Fraction in lowest term.
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ci
1107db96d56Sopenharmony_ci   .. method:: as_integer_ratio()
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ci      Return a tuple of two integers, whose ratio is equal
1137db96d56Sopenharmony_ci      to the Fraction and with a positive denominator.
1147db96d56Sopenharmony_ci
1157db96d56Sopenharmony_ci      .. versionadded:: 3.8
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   .. classmethod:: from_float(flt)
1187db96d56Sopenharmony_ci
1197db96d56Sopenharmony_ci      Alternative constructor which only accepts instances of
1207db96d56Sopenharmony_ci      :class:`float` or :class:`numbers.Integral`. Beware that
1217db96d56Sopenharmony_ci      ``Fraction.from_float(0.3)`` is not the same value as ``Fraction(3, 10)``.
1227db96d56Sopenharmony_ci
1237db96d56Sopenharmony_ci      .. note::
1247db96d56Sopenharmony_ci
1257db96d56Sopenharmony_ci         From Python 3.2 onwards, you can also construct a
1267db96d56Sopenharmony_ci         :class:`Fraction` instance directly from a :class:`float`.
1277db96d56Sopenharmony_ci
1287db96d56Sopenharmony_ci
1297db96d56Sopenharmony_ci   .. classmethod:: from_decimal(dec)
1307db96d56Sopenharmony_ci
1317db96d56Sopenharmony_ci      Alternative constructor which only accepts instances of
1327db96d56Sopenharmony_ci      :class:`decimal.Decimal` or :class:`numbers.Integral`.
1337db96d56Sopenharmony_ci
1347db96d56Sopenharmony_ci      .. note::
1357db96d56Sopenharmony_ci
1367db96d56Sopenharmony_ci         From Python 3.2 onwards, you can also construct a
1377db96d56Sopenharmony_ci         :class:`Fraction` instance directly from a :class:`decimal.Decimal`
1387db96d56Sopenharmony_ci         instance.
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ci   .. method:: limit_denominator(max_denominator=1000000)
1427db96d56Sopenharmony_ci
1437db96d56Sopenharmony_ci      Finds and returns the closest :class:`Fraction` to ``self`` that has
1447db96d56Sopenharmony_ci      denominator at most max_denominator.  This method is useful for finding
1457db96d56Sopenharmony_ci      rational approximations to a given floating-point number:
1467db96d56Sopenharmony_ci
1477db96d56Sopenharmony_ci         >>> from fractions import Fraction
1487db96d56Sopenharmony_ci         >>> Fraction('3.1415926535897932').limit_denominator(1000)
1497db96d56Sopenharmony_ci         Fraction(355, 113)
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci      or for recovering a rational number that's represented as a float:
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci         >>> from math import pi, cos
1547db96d56Sopenharmony_ci         >>> Fraction(cos(pi/3))
1557db96d56Sopenharmony_ci         Fraction(4503599627370497, 9007199254740992)
1567db96d56Sopenharmony_ci         >>> Fraction(cos(pi/3)).limit_denominator()
1577db96d56Sopenharmony_ci         Fraction(1, 2)
1587db96d56Sopenharmony_ci         >>> Fraction(1.1).limit_denominator()
1597db96d56Sopenharmony_ci         Fraction(11, 10)
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ci
1627db96d56Sopenharmony_ci   .. method:: __floor__()
1637db96d56Sopenharmony_ci
1647db96d56Sopenharmony_ci      Returns the greatest :class:`int` ``<= self``.  This method can
1657db96d56Sopenharmony_ci      also be accessed through the :func:`math.floor` function:
1667db96d56Sopenharmony_ci
1677db96d56Sopenharmony_ci        >>> from math import floor
1687db96d56Sopenharmony_ci        >>> floor(Fraction(355, 113))
1697db96d56Sopenharmony_ci        3
1707db96d56Sopenharmony_ci
1717db96d56Sopenharmony_ci
1727db96d56Sopenharmony_ci   .. method:: __ceil__()
1737db96d56Sopenharmony_ci
1747db96d56Sopenharmony_ci      Returns the least :class:`int` ``>= self``.  This method can
1757db96d56Sopenharmony_ci      also be accessed through the :func:`math.ceil` function.
1767db96d56Sopenharmony_ci
1777db96d56Sopenharmony_ci
1787db96d56Sopenharmony_ci   .. method:: __round__()
1797db96d56Sopenharmony_ci               __round__(ndigits)
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ci      The first version returns the nearest :class:`int` to ``self``,
1827db96d56Sopenharmony_ci      rounding half to even. The second version rounds ``self`` to the
1837db96d56Sopenharmony_ci      nearest multiple of ``Fraction(1, 10**ndigits)`` (logically, if
1847db96d56Sopenharmony_ci      ``ndigits`` is negative), again rounding half toward even.  This
1857db96d56Sopenharmony_ci      method can also be accessed through the :func:`round` function.
1867db96d56Sopenharmony_ci
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ci.. seealso::
1897db96d56Sopenharmony_ci
1907db96d56Sopenharmony_ci   Module :mod:`numbers`
1917db96d56Sopenharmony_ci      The abstract base classes making up the numeric tower.
192