Home | History | Annotate | Download | only in library
      1 :mod:`decimal` --- Decimal fixed point and floating point arithmetic
      2 ====================================================================
      3 
      4 .. module:: decimal
      5    :synopsis: Implementation of the General Decimal Arithmetic  Specification.
      6 
      7 .. moduleauthor:: Eric Price <eprice at tjhsst.edu>
      8 .. moduleauthor:: Facundo Batista <facundo at taniquetil.com.ar>
      9 .. moduleauthor:: Raymond Hettinger <python at rcn.com>
     10 .. moduleauthor:: Aahz <aahz at pobox.com>
     11 .. moduleauthor:: Tim Peters <tim.one at comcast.net>
     12 .. moduleauthor:: Stefan Krah <skrah at bytereef.org>
     13 .. sectionauthor:: Raymond D. Hettinger <python at rcn.com>
     14 
     15 **Source code:** :source:`Lib/decimal.py`
     16 
     17 .. import modules for testing inline doctests with the Sphinx doctest builder
     18 .. testsetup:: *
     19 
     20    import decimal
     21    import math
     22    from decimal import *
     23    # make sure each group gets a fresh context
     24    setcontext(Context())
     25 
     26 .. testcleanup:: *
     27 
     28    # make sure other tests (outside this file) get a fresh context
     29    setcontext(Context())
     30 
     31 --------------
     32 
     33 The :mod:`decimal` module provides support for fast correctly-rounded
     34 decimal floating point arithmetic. It offers several advantages over the
     35 :class:`float` datatype:
     36 
     37 * Decimal "is based on a floating-point model which was designed with people
     38   in mind, and necessarily has a paramount guiding principle -- computers must
     39   provide an arithmetic that works in the same way as the arithmetic that
     40   people learn at school." -- excerpt from the decimal arithmetic specification.
     41 
     42 * Decimal numbers can be represented exactly.  In contrast, numbers like
     43   :const:`1.1` and :const:`2.2` do not have exact representations in binary
     44   floating point. End users typically would not expect ``1.1 + 2.2`` to display
     45   as :const:`3.3000000000000003` as it does with binary floating point.
     46 
     47 * The exactness carries over into arithmetic.  In decimal floating point, ``0.1
     48   + 0.1 + 0.1 - 0.3`` is exactly equal to zero.  In binary floating point, the result
     49   is :const:`5.5511151231257827e-017`.  While near to zero, the differences
     50   prevent reliable equality testing and differences can accumulate. For this
     51   reason, decimal is preferred in accounting applications which have strict
     52   equality invariants.
     53 
     54 * The decimal module incorporates a notion of significant places so that ``1.30
     55   + 1.20`` is :const:`2.50`.  The trailing zero is kept to indicate significance.
     56   This is the customary presentation for monetary applications. For
     57   multiplication, the "schoolbook" approach uses all the figures in the
     58   multiplicands.  For instance, ``1.3 * 1.2`` gives :const:`1.56` while ``1.30 *
     59   1.20`` gives :const:`1.5600`.
     60 
     61 * Unlike hardware based binary floating point, the decimal module has a user
     62   alterable precision (defaulting to 28 places) which can be as large as needed for
     63   a given problem:
     64 
     65      >>> from decimal import *
     66      >>> getcontext().prec = 6
     67      >>> Decimal(1) / Decimal(7)
     68      Decimal('0.142857')
     69      >>> getcontext().prec = 28
     70      >>> Decimal(1) / Decimal(7)
     71      Decimal('0.1428571428571428571428571429')
     72 
     73 * Both binary and decimal floating point are implemented in terms of published
     74   standards.  While the built-in float type exposes only a modest portion of its
     75   capabilities, the decimal module exposes all required parts of the standard.
     76   When needed, the programmer has full control over rounding and signal handling.
     77   This includes an option to enforce exact arithmetic by using exceptions
     78   to block any inexact operations.
     79 
     80 * The decimal module was designed to support "without prejudice, both exact
     81   unrounded decimal arithmetic (sometimes called fixed-point arithmetic)
     82   and rounded floating-point arithmetic."  -- excerpt from the decimal
     83   arithmetic specification.
     84 
     85 The module design is centered around three concepts:  the decimal number, the
     86 context for arithmetic, and signals.
     87 
     88 A decimal number is immutable.  It has a sign, coefficient digits, and an
     89 exponent.  To preserve significance, the coefficient digits do not truncate
     90 trailing zeros.  Decimals also include special values such as
     91 :const:`Infinity`, :const:`-Infinity`, and :const:`NaN`.  The standard also
     92 differentiates :const:`-0` from :const:`+0`.
     93 
     94 The context for arithmetic is an environment specifying precision, rounding
     95 rules, limits on exponents, flags indicating the results of operations, and trap
     96 enablers which determine whether signals are treated as exceptions.  Rounding
     97 options include :const:`ROUND_CEILING`, :const:`ROUND_DOWN`,
     98 :const:`ROUND_FLOOR`, :const:`ROUND_HALF_DOWN`, :const:`ROUND_HALF_EVEN`,
     99 :const:`ROUND_HALF_UP`, :const:`ROUND_UP`, and :const:`ROUND_05UP`.
    100 
    101 Signals are groups of exceptional conditions arising during the course of
    102 computation.  Depending on the needs of the application, signals may be ignored,
    103 considered as informational, or treated as exceptions. The signals in the
    104 decimal module are: :const:`Clamped`, :const:`InvalidOperation`,
    105 :const:`DivisionByZero`, :const:`Inexact`, :const:`Rounded`, :const:`Subnormal`,
    106 :const:`Overflow`, :const:`Underflow` and :const:`FloatOperation`.
    107 
    108 For each signal there is a flag and a trap enabler.  When a signal is
    109 encountered, its flag is set to one, then, if the trap enabler is
    110 set to one, an exception is raised.  Flags are sticky, so the user needs to
    111 reset them before monitoring a calculation.
    112 
    113 
    114 .. seealso::
    115 
    116    * IBM's General Decimal Arithmetic Specification, `The General Decimal Arithmetic
    117      Specification <http://speleotrove.com/decimal/decarith.html>`_.
    118 
    119 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    120 
    121 
    122 .. _decimal-tutorial:
    123 
    124 Quick-start Tutorial
    125 --------------------
    126 
    127 The usual start to using decimals is importing the module, viewing the current
    128 context with :func:`getcontext` and, if necessary, setting new values for
    129 precision, rounding, or enabled traps::
    130 
    131    >>> from decimal import *
    132    >>> getcontext()
    133    Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
    134            capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,
    135            InvalidOperation])
    136 
    137    >>> getcontext().prec = 7       # Set a new precision
    138 
    139 Decimal instances can be constructed from integers, strings, floats, or tuples.
    140 Construction from an integer or a float performs an exact conversion of the
    141 value of that integer or float.  Decimal numbers include special values such as
    142 :const:`NaN` which stands for "Not a number", positive and negative
    143 :const:`Infinity`, and :const:`-0`::
    144 
    145    >>> getcontext().prec = 28
    146    >>> Decimal(10)
    147    Decimal('10')
    148    >>> Decimal('3.14')
    149    Decimal('3.14')
    150    >>> Decimal(3.14)
    151    Decimal('3.140000000000000124344978758017532527446746826171875')
    152    >>> Decimal((0, (3, 1, 4), -2))
    153    Decimal('3.14')
    154    >>> Decimal(str(2.0 ** 0.5))
    155    Decimal('1.4142135623730951')
    156    >>> Decimal(2) ** Decimal('0.5')
    157    Decimal('1.414213562373095048801688724')
    158    >>> Decimal('NaN')
    159    Decimal('NaN')
    160    >>> Decimal('-Infinity')
    161    Decimal('-Infinity')
    162 
    163 If the :exc:`FloatOperation` signal is trapped, accidental mixing of
    164 decimals and floats in constructors or ordering comparisons raises
    165 an exception::
    166 
    167    >>> c = getcontext()
    168    >>> c.traps[FloatOperation] = True
    169    >>> Decimal(3.14)
    170    Traceback (most recent call last):
    171      File "<stdin>", line 1, in <module>
    172    decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
    173    >>> Decimal('3.5') < 3.7
    174    Traceback (most recent call last):
    175      File "<stdin>", line 1, in <module>
    176    decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
    177    >>> Decimal('3.5') == 3.5
    178    True
    179 
    180 .. versionadded:: 3.3
    181 
    182 The significance of a new Decimal is determined solely by the number of digits
    183 input.  Context precision and rounding only come into play during arithmetic
    184 operations.
    185 
    186 .. doctest:: newcontext
    187 
    188    >>> getcontext().prec = 6
    189    >>> Decimal('3.0')
    190    Decimal('3.0')
    191    >>> Decimal('3.1415926535')
    192    Decimal('3.1415926535')
    193    >>> Decimal('3.1415926535') + Decimal('2.7182818285')
    194    Decimal('5.85987')
    195    >>> getcontext().rounding = ROUND_UP
    196    >>> Decimal('3.1415926535') + Decimal('2.7182818285')
    197    Decimal('5.85988')
    198 
    199 If the internal limits of the C version are exceeded, constructing
    200 a decimal raises :class:`InvalidOperation`::
    201 
    202    >>> Decimal("1e9999999999999999999")
    203    Traceback (most recent call last):
    204      File "<stdin>", line 1, in <module>
    205    decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]
    206 
    207 .. versionchanged:: 3.3
    208 
    209 Decimals interact well with much of the rest of Python.  Here is a small decimal
    210 floating point flying circus:
    211 
    212 .. doctest::
    213    :options: +NORMALIZE_WHITESPACE
    214 
    215    >>> data = list(map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split()))
    216    >>> max(data)
    217    Decimal('9.25')
    218    >>> min(data)
    219    Decimal('0.03')
    220    >>> sorted(data)
    221    [Decimal('0.03'), Decimal('1.00'), Decimal('1.34'), Decimal('1.87'),
    222     Decimal('2.35'), Decimal('3.45'), Decimal('9.25')]
    223    >>> sum(data)
    224    Decimal('19.29')
    225    >>> a,b,c = data[:3]
    226    >>> str(a)
    227    '1.34'
    228    >>> float(a)
    229    1.34
    230    >>> round(a, 1)
    231    Decimal('1.3')
    232    >>> int(a)
    233    1
    234    >>> a * 5
    235    Decimal('6.70')
    236    >>> a * b
    237    Decimal('2.5058')
    238    >>> c % a
    239    Decimal('0.77')
    240 
    241 And some mathematical functions are also available to Decimal:
    242 
    243    >>> getcontext().prec = 28
    244    >>> Decimal(2).sqrt()
    245    Decimal('1.414213562373095048801688724')
    246    >>> Decimal(1).exp()
    247    Decimal('2.718281828459045235360287471')
    248    >>> Decimal('10').ln()
    249    Decimal('2.302585092994045684017991455')
    250    >>> Decimal('10').log10()
    251    Decimal('1')
    252 
    253 The :meth:`quantize` method rounds a number to a fixed exponent.  This method is
    254 useful for monetary applications that often round results to a fixed number of
    255 places:
    256 
    257    >>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
    258    Decimal('7.32')
    259    >>> Decimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP)
    260    Decimal('8')
    261 
    262 As shown above, the :func:`getcontext` function accesses the current context and
    263 allows the settings to be changed.  This approach meets the needs of most
    264 applications.
    265 
    266 For more advanced work, it may be useful to create alternate contexts using the
    267 Context() constructor.  To make an alternate active, use the :func:`setcontext`
    268 function.
    269 
    270 In accordance with the standard, the :mod:`decimal` module provides two ready to
    271 use standard contexts, :const:`BasicContext` and :const:`ExtendedContext`. The
    272 former is especially useful for debugging because many of the traps are
    273 enabled:
    274 
    275 .. doctest:: newcontext
    276    :options: +NORMALIZE_WHITESPACE
    277 
    278    >>> myothercontext = Context(prec=60, rounding=ROUND_HALF_DOWN)
    279    >>> setcontext(myothercontext)
    280    >>> Decimal(1) / Decimal(7)
    281    Decimal('0.142857142857142857142857142857142857142857142857142857142857')
    282 
    283    >>> ExtendedContext
    284    Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
    285            capitals=1, clamp=0, flags=[], traps=[])
    286    >>> setcontext(ExtendedContext)
    287    >>> Decimal(1) / Decimal(7)
    288    Decimal('0.142857143')
    289    >>> Decimal(42) / Decimal(0)
    290    Decimal('Infinity')
    291 
    292    >>> setcontext(BasicContext)
    293    >>> Decimal(42) / Decimal(0)
    294    Traceback (most recent call last):
    295      File "<pyshell#143>", line 1, in -toplevel-
    296        Decimal(42) / Decimal(0)
    297    DivisionByZero: x / 0
    298 
    299 Contexts also have signal flags for monitoring exceptional conditions
    300 encountered during computations.  The flags remain set until explicitly cleared,
    301 so it is best to clear the flags before each set of monitored computations by
    302 using the :meth:`clear_flags` method. ::
    303 
    304    >>> setcontext(ExtendedContext)
    305    >>> getcontext().clear_flags()
    306    >>> Decimal(355) / Decimal(113)
    307    Decimal('3.14159292')
    308    >>> getcontext()
    309    Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
    310            capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[])
    311 
    312 The *flags* entry shows that the rational approximation to :const:`Pi` was
    313 rounded (digits beyond the context precision were thrown away) and that the
    314 result is inexact (some of the discarded digits were non-zero).
    315 
    316 Individual traps are set using the dictionary in the :attr:`traps` field of a
    317 context:
    318 
    319 .. doctest:: newcontext
    320 
    321    >>> setcontext(ExtendedContext)
    322    >>> Decimal(1) / Decimal(0)
    323    Decimal('Infinity')
    324    >>> getcontext().traps[DivisionByZero] = 1
    325    >>> Decimal(1) / Decimal(0)
    326    Traceback (most recent call last):
    327      File "<pyshell#112>", line 1, in -toplevel-
    328        Decimal(1) / Decimal(0)
    329    DivisionByZero: x / 0
    330 
    331 Most programs adjust the current context only once, at the beginning of the
    332 program.  And, in many applications, data is converted to :class:`Decimal` with
    333 a single cast inside a loop.  With context set and decimals created, the bulk of
    334 the program manipulates the data no differently than with other Python numeric
    335 types.
    336 
    337 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    338 
    339 
    340 .. _decimal-decimal:
    341 
    342 Decimal objects
    343 ---------------
    344 
    345 
    346 .. class:: Decimal(value="0", context=None)
    347 
    348    Construct a new :class:`Decimal` object based from *value*.
    349 
    350    *value* can be an integer, string, tuple, :class:`float`, or another :class:`Decimal`
    351    object. If no *value* is given, returns ``Decimal('0')``.  If *value* is a
    352    string, it should conform to the decimal numeric string syntax after leading
    353    and trailing whitespace characters, as well as underscores throughout, are removed::
    354 
    355       sign           ::=  '+' | '-'
    356       digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
    357       indicator      ::=  'e' | 'E'
    358       digits         ::=  digit [digit]...
    359       decimal-part   ::=  digits '.' [digits] | ['.'] digits
    360       exponent-part  ::=  indicator [sign] digits
    361       infinity       ::=  'Infinity' | 'Inf'
    362       nan            ::=  'NaN' [digits] | 'sNaN' [digits]
    363       numeric-value  ::=  decimal-part [exponent-part] | infinity
    364       numeric-string ::=  [sign] numeric-value | [sign] nan
    365 
    366    Other Unicode decimal digits are also permitted where ``digit``
    367    appears above.  These include decimal digits from various other
    368    alphabets (for example, Arabic-Indic and Devangar digits) along
    369    with the fullwidth digits ``'\uff10'`` through ``'\uff19'``.
    370 
    371    If *value* is a :class:`tuple`, it should have three components, a sign
    372    (:const:`0` for positive or :const:`1` for negative), a :class:`tuple` of
    373    digits, and an integer exponent. For example, ``Decimal((0, (1, 4, 1, 4), -3))``
    374    returns ``Decimal('1.414')``.
    375 
    376    If *value* is a :class:`float`, the binary floating point value is losslessly
    377    converted to its exact decimal equivalent.  This conversion can often require
    378    53 or more digits of precision.  For example, ``Decimal(float('1.1'))``
    379    converts to
    380    ``Decimal('1.100000000000000088817841970012523233890533447265625')``.
    381 
    382    The *context* precision does not affect how many digits are stored. That is
    383    determined exclusively by the number of digits in *value*. For example,
    384    ``Decimal('3.00000')`` records all five zeros even if the context precision is
    385    only three.
    386 
    387    The purpose of the *context* argument is determining what to do if *value* is a
    388    malformed string.  If the context traps :const:`InvalidOperation`, an exception
    389    is raised; otherwise, the constructor returns a new Decimal with the value of
    390    :const:`NaN`.
    391 
    392    Once constructed, :class:`Decimal` objects are immutable.
    393 
    394    .. versionchanged:: 3.2
    395       The argument to the constructor is now permitted to be a :class:`float`
    396       instance.
    397 
    398    .. versionchanged:: 3.3
    399       :class:`float` arguments raise an exception if the :exc:`FloatOperation`
    400       trap is set. By default the trap is off.
    401 
    402    .. versionchanged:: 3.6
    403       Underscores are allowed for grouping, as with integral and floating-point
    404       literals in code.
    405 
    406    Decimal floating point objects share many properties with the other built-in
    407    numeric types such as :class:`float` and :class:`int`.  All of the usual math
    408    operations and special methods apply.  Likewise, decimal objects can be
    409    copied, pickled, printed, used as dictionary keys, used as set elements,
    410    compared, sorted, and coerced to another type (such as :class:`float` or
    411    :class:`int`).
    412 
    413    There are some small differences between arithmetic on Decimal objects and
    414    arithmetic on integers and floats.  When the remainder operator ``%`` is
    415    applied to Decimal objects, the sign of the result is the sign of the
    416    *dividend* rather than the sign of the divisor::
    417 
    418       >>> (-7) % 4
    419       1
    420       >>> Decimal(-7) % Decimal(4)
    421       Decimal('-3')
    422 
    423    The integer division operator ``//`` behaves analogously, returning the
    424    integer part of the true quotient (truncating towards zero) rather than its
    425    floor, so as to preserve the usual identity ``x == (x // y) * y + x % y``::
    426 
    427       >>> -7 // 4
    428       -2
    429       >>> Decimal(-7) // Decimal(4)
    430       Decimal('-1')
    431 
    432    The ``%`` and ``//`` operators implement the ``remainder`` and
    433    ``divide-integer`` operations (respectively) as described in the
    434    specification.
    435 
    436    Decimal objects cannot generally be combined with floats or
    437    instances of :class:`fractions.Fraction` in arithmetic operations:
    438    an attempt to add a :class:`Decimal` to a :class:`float`, for
    439    example, will raise a :exc:`TypeError`.  However, it is possible to
    440    use Python's comparison operators to compare a :class:`Decimal`
    441    instance ``x`` with another number ``y``.  This avoids confusing results
    442    when doing equality comparisons between numbers of different types.
    443 
    444    .. versionchanged:: 3.2
    445       Mixed-type comparisons between :class:`Decimal` instances and other
    446       numeric types are now fully supported.
    447 
    448    In addition to the standard numeric properties, decimal floating point
    449    objects also have a number of specialized methods:
    450 
    451 
    452    .. method:: adjusted()
    453 
    454       Return the adjusted exponent after shifting out the coefficient's
    455       rightmost digits until only the lead digit remains:
    456       ``Decimal('321e+5').adjusted()`` returns seven.  Used for determining the
    457       position of the most significant digit with respect to the decimal point.
    458 
    459    .. method:: as_integer_ratio()
    460 
    461       Return a pair ``(n, d)`` of integers that represent the given
    462       :class:`Decimal` instance as a fraction, in lowest terms and
    463       with a positive denominator::
    464 
    465           >>> Decimal('-3.14').as_integer_ratio()
    466           (-157, 50)
    467 
    468       The conversion is exact.  Raise OverflowError on infinities and ValueError
    469       on NaNs.
    470 
    471    .. versionadded:: 3.6
    472 
    473    .. method:: as_tuple()
    474 
    475       Return a :term:`named tuple` representation of the number:
    476       ``DecimalTuple(sign, digits, exponent)``.
    477 
    478 
    479    .. method:: canonical()
    480 
    481       Return the canonical encoding of the argument.  Currently, the encoding of
    482       a :class:`Decimal` instance is always canonical, so this operation returns
    483       its argument unchanged.
    484 
    485    .. method:: compare(other, context=None)
    486 
    487       Compare the values of two Decimal instances.  :meth:`compare` returns a
    488       Decimal instance, and if either operand is a NaN then the result is a
    489       NaN::
    490 
    491          a or b is a NaN  ==> Decimal('NaN')
    492          a < b            ==> Decimal('-1')
    493          a == b           ==> Decimal('0')
    494          a > b            ==> Decimal('1')
    495 
    496    .. method:: compare_signal(other, context=None)
    497 
    498       This operation is identical to the :meth:`compare` method, except that all
    499       NaNs signal.  That is, if neither operand is a signaling NaN then any
    500       quiet NaN operand is treated as though it were a signaling NaN.
    501 
    502    .. method:: compare_total(other, context=None)
    503 
    504       Compare two operands using their abstract representation rather than their
    505       numerical value.  Similar to the :meth:`compare` method, but the result
    506       gives a total ordering on :class:`Decimal` instances.  Two
    507       :class:`Decimal` instances with the same numeric value but different
    508       representations compare unequal in this ordering:
    509 
    510          >>> Decimal('12.0').compare_total(Decimal('12'))
    511          Decimal('-1')
    512 
    513       Quiet and signaling NaNs are also included in the total ordering.  The
    514       result of this function is ``Decimal('0')`` if both operands have the same
    515       representation, ``Decimal('-1')`` if the first operand is lower in the
    516       total order than the second, and ``Decimal('1')`` if the first operand is
    517       higher in the total order than the second operand.  See the specification
    518       for details of the total order.
    519 
    520       This operation is unaffected by context and is quiet: no flags are changed
    521       and no rounding is performed.  As an exception, the C version may raise
    522       InvalidOperation if the second operand cannot be converted exactly.
    523 
    524    .. method:: compare_total_mag(other, context=None)
    525 
    526       Compare two operands using their abstract representation rather than their
    527       value as in :meth:`compare_total`, but ignoring the sign of each operand.
    528       ``x.compare_total_mag(y)`` is equivalent to
    529       ``x.copy_abs().compare_total(y.copy_abs())``.
    530 
    531       This operation is unaffected by context and is quiet: no flags are changed
    532       and no rounding is performed.  As an exception, the C version may raise
    533       InvalidOperation if the second operand cannot be converted exactly.
    534 
    535    .. method:: conjugate()
    536 
    537       Just returns self, this method is only to comply with the Decimal
    538       Specification.
    539 
    540    .. method:: copy_abs()
    541 
    542       Return the absolute value of the argument.  This operation is unaffected
    543       by the context and is quiet: no flags are changed and no rounding is
    544       performed.
    545 
    546    .. method:: copy_negate()
    547 
    548       Return the negation of the argument.  This operation is unaffected by the
    549       context and is quiet: no flags are changed and no rounding is performed.
    550 
    551    .. method:: copy_sign(other, context=None)
    552 
    553       Return a copy of the first operand with the sign set to be the same as the
    554       sign of the second operand.  For example:
    555 
    556          >>> Decimal('2.3').copy_sign(Decimal('-1.5'))
    557          Decimal('-2.3')
    558 
    559       This operation is unaffected by context and is quiet: no flags are changed
    560       and no rounding is performed.  As an exception, the C version may raise
    561       InvalidOperation if the second operand cannot be converted exactly.
    562 
    563    .. method:: exp(context=None)
    564 
    565       Return the value of the (natural) exponential function ``e**x`` at the
    566       given number.  The result is correctly rounded using the
    567       :const:`ROUND_HALF_EVEN` rounding mode.
    568 
    569       >>> Decimal(1).exp()
    570       Decimal('2.718281828459045235360287471')
    571       >>> Decimal(321).exp()
    572       Decimal('2.561702493119680037517373933E+139')
    573 
    574    .. method:: from_float(f)
    575 
    576       Classmethod that converts a float to a decimal number, exactly.
    577 
    578       Note `Decimal.from_float(0.1)` is not the same as `Decimal('0.1')`.
    579       Since 0.1 is not exactly representable in binary floating point, the
    580       value is stored as the nearest representable value which is
    581       `0x1.999999999999ap-4`.  That equivalent value in decimal is
    582       `0.1000000000000000055511151231257827021181583404541015625`.
    583 
    584       .. note:: From Python 3.2 onwards, a :class:`Decimal` instance
    585          can also be constructed directly from a :class:`float`.
    586 
    587       .. doctest::
    588 
    589           >>> Decimal.from_float(0.1)
    590           Decimal('0.1000000000000000055511151231257827021181583404541015625')
    591           >>> Decimal.from_float(float('nan'))
    592           Decimal('NaN')
    593           >>> Decimal.from_float(float('inf'))
    594           Decimal('Infinity')
    595           >>> Decimal.from_float(float('-inf'))
    596           Decimal('-Infinity')
    597 
    598       .. versionadded:: 3.1
    599 
    600    .. method:: fma(other, third, context=None)
    601 
    602       Fused multiply-add.  Return self*other+third with no rounding of the
    603       intermediate product self*other.
    604 
    605       >>> Decimal(2).fma(3, 5)
    606       Decimal('11')
    607 
    608    .. method:: is_canonical()
    609 
    610       Return :const:`True` if the argument is canonical and :const:`False`
    611       otherwise.  Currently, a :class:`Decimal` instance is always canonical, so
    612       this operation always returns :const:`True`.
    613 
    614    .. method:: is_finite()
    615 
    616       Return :const:`True` if the argument is a finite number, and
    617       :const:`False` if the argument is an infinity or a NaN.
    618 
    619    .. method:: is_infinite()
    620 
    621       Return :const:`True` if the argument is either positive or negative
    622       infinity and :const:`False` otherwise.
    623 
    624    .. method:: is_nan()
    625 
    626       Return :const:`True` if the argument is a (quiet or signaling) NaN and
    627       :const:`False` otherwise.
    628 
    629    .. method:: is_normal(context=None)
    630 
    631       Return :const:`True` if the argument is a *normal* finite number.  Return
    632       :const:`False` if the argument is zero, subnormal, infinite or a NaN.
    633 
    634    .. method:: is_qnan()
    635 
    636       Return :const:`True` if the argument is a quiet NaN, and
    637       :const:`False` otherwise.
    638 
    639    .. method:: is_signed()
    640 
    641       Return :const:`True` if the argument has a negative sign and
    642       :const:`False` otherwise.  Note that zeros and NaNs can both carry signs.
    643 
    644    .. method:: is_snan()
    645 
    646       Return :const:`True` if the argument is a signaling NaN and :const:`False`
    647       otherwise.
    648 
    649    .. method:: is_subnormal(context=None)
    650 
    651       Return :const:`True` if the argument is subnormal, and :const:`False`
    652       otherwise.
    653 
    654    .. method:: is_zero()
    655 
    656       Return :const:`True` if the argument is a (positive or negative) zero and
    657       :const:`False` otherwise.
    658 
    659    .. method:: ln(context=None)
    660 
    661       Return the natural (base e) logarithm of the operand.  The result is
    662       correctly rounded using the :const:`ROUND_HALF_EVEN` rounding mode.
    663 
    664    .. method:: log10(context=None)
    665 
    666       Return the base ten logarithm of the operand.  The result is correctly
    667       rounded using the :const:`ROUND_HALF_EVEN` rounding mode.
    668 
    669    .. method:: logb(context=None)
    670 
    671       For a nonzero number, return the adjusted exponent of its operand as a
    672       :class:`Decimal` instance.  If the operand is a zero then
    673       ``Decimal('-Infinity')`` is returned and the :const:`DivisionByZero` flag
    674       is raised.  If the operand is an infinity then ``Decimal('Infinity')`` is
    675       returned.
    676 
    677    .. method:: logical_and(other, context=None)
    678 
    679       :meth:`logical_and` is a logical operation which takes two *logical
    680       operands* (see :ref:`logical_operands_label`).  The result is the
    681       digit-wise ``and`` of the two operands.
    682 
    683    .. method:: logical_invert(context=None)
    684 
    685       :meth:`logical_invert` is a logical operation.  The
    686       result is the digit-wise inversion of the operand.
    687 
    688    .. method:: logical_or(other, context=None)
    689 
    690       :meth:`logical_or` is a logical operation which takes two *logical
    691       operands* (see :ref:`logical_operands_label`).  The result is the
    692       digit-wise ``or`` of the two operands.
    693 
    694    .. method:: logical_xor(other, context=None)
    695 
    696       :meth:`logical_xor` is a logical operation which takes two *logical
    697       operands* (see :ref:`logical_operands_label`).  The result is the
    698       digit-wise exclusive or of the two operands.
    699 
    700    .. method:: max(other, context=None)
    701 
    702       Like ``max(self, other)`` except that the context rounding rule is applied
    703       before returning and that :const:`NaN` values are either signaled or
    704       ignored (depending on the context and whether they are signaling or
    705       quiet).
    706 
    707    .. method:: max_mag(other, context=None)
    708 
    709       Similar to the :meth:`.max` method, but the comparison is done using the
    710       absolute values of the operands.
    711 
    712    .. method:: min(other, context=None)
    713 
    714       Like ``min(self, other)`` except that the context rounding rule is applied
    715       before returning and that :const:`NaN` values are either signaled or
    716       ignored (depending on the context and whether they are signaling or
    717       quiet).
    718 
    719    .. method:: min_mag(other, context=None)
    720 
    721       Similar to the :meth:`.min` method, but the comparison is done using the
    722       absolute values of the operands.
    723 
    724    .. method:: next_minus(context=None)
    725 
    726       Return the largest number representable in the given context (or in the
    727       current thread's context if no context is given) that is smaller than the
    728       given operand.
    729 
    730    .. method:: next_plus(context=None)
    731 
    732       Return the smallest number representable in the given context (or in the
    733       current thread's context if no context is given) that is larger than the
    734       given operand.
    735 
    736    .. method:: next_toward(other, context=None)
    737 
    738       If the two operands are unequal, return the number closest to the first
    739       operand in the direction of the second operand.  If both operands are
    740       numerically equal, return a copy of the first operand with the sign set to
    741       be the same as the sign of the second operand.
    742 
    743    .. method:: normalize(context=None)
    744 
    745       Normalize the number by stripping the rightmost trailing zeros and
    746       converting any result equal to :const:`Decimal('0')` to
    747       :const:`Decimal('0e0')`. Used for producing canonical values for attributes
    748       of an equivalence class. For example, ``Decimal('32.100')`` and
    749       ``Decimal('0.321000e+2')`` both normalize to the equivalent value
    750       ``Decimal('32.1')``.
    751 
    752    .. method:: number_class(context=None)
    753 
    754       Return a string describing the *class* of the operand.  The returned value
    755       is one of the following ten strings.
    756 
    757       * ``"-Infinity"``, indicating that the operand is negative infinity.
    758       * ``"-Normal"``, indicating that the operand is a negative normal number.
    759       * ``"-Subnormal"``, indicating that the operand is negative and subnormal.
    760       * ``"-Zero"``, indicating that the operand is a negative zero.
    761       * ``"+Zero"``, indicating that the operand is a positive zero.
    762       * ``"+Subnormal"``, indicating that the operand is positive and subnormal.
    763       * ``"+Normal"``, indicating that the operand is a positive normal number.
    764       * ``"+Infinity"``, indicating that the operand is positive infinity.
    765       * ``"NaN"``, indicating that the operand is a quiet NaN (Not a Number).
    766       * ``"sNaN"``, indicating that the operand is a signaling NaN.
    767 
    768    .. method:: quantize(exp, rounding=None, context=None)
    769 
    770       Return a value equal to the first operand after rounding and having the
    771       exponent of the second operand.
    772 
    773       >>> Decimal('1.41421356').quantize(Decimal('1.000'))
    774       Decimal('1.414')
    775 
    776       Unlike other operations, if the length of the coefficient after the
    777       quantize operation would be greater than precision, then an
    778       :const:`InvalidOperation` is signaled. This guarantees that, unless there
    779       is an error condition, the quantized exponent is always equal to that of
    780       the right-hand operand.
    781 
    782       Also unlike other operations, quantize never signals Underflow, even if
    783       the result is subnormal and inexact.
    784 
    785       If the exponent of the second operand is larger than that of the first
    786       then rounding may be necessary.  In this case, the rounding mode is
    787       determined by the ``rounding`` argument if given, else by the given
    788       ``context`` argument; if neither argument is given the rounding mode of
    789       the current thread's context is used.
    790 
    791       An error is returned whenever the resulting exponent is greater than
    792       :attr:`Emax` or less than :attr:`Etiny`.
    793 
    794    .. method:: radix()
    795 
    796       Return ``Decimal(10)``, the radix (base) in which the :class:`Decimal`
    797       class does all its arithmetic.  Included for compatibility with the
    798       specification.
    799 
    800    .. method:: remainder_near(other, context=None)
    801 
    802       Return the remainder from dividing *self* by *other*.  This differs from
    803       ``self % other`` in that the sign of the remainder is chosen so as to
    804       minimize its absolute value.  More precisely, the return value is
    805       ``self - n * other`` where ``n`` is the integer nearest to the exact
    806       value of ``self / other``, and if two integers are equally near then the
    807       even one is chosen.
    808 
    809       If the result is zero then its sign will be the sign of *self*.
    810 
    811       >>> Decimal(18).remainder_near(Decimal(10))
    812       Decimal('-2')
    813       >>> Decimal(25).remainder_near(Decimal(10))
    814       Decimal('5')
    815       >>> Decimal(35).remainder_near(Decimal(10))
    816       Decimal('-5')
    817 
    818    .. method:: rotate(other, context=None)
    819 
    820       Return the result of rotating the digits of the first operand by an amount
    821       specified by the second operand.  The second operand must be an integer in
    822       the range -precision through precision.  The absolute value of the second
    823       operand gives the number of places to rotate.  If the second operand is
    824       positive then rotation is to the left; otherwise rotation is to the right.
    825       The coefficient of the first operand is padded on the left with zeros to
    826       length precision if necessary.  The sign and exponent of the first operand
    827       are unchanged.
    828 
    829    .. method:: same_quantum(other, context=None)
    830 
    831       Test whether self and other have the same exponent or whether both are
    832       :const:`NaN`.
    833 
    834       This operation is unaffected by context and is quiet: no flags are changed
    835       and no rounding is performed.  As an exception, the C version may raise
    836       InvalidOperation if the second operand cannot be converted exactly.
    837 
    838    .. method:: scaleb(other, context=None)
    839 
    840       Return the first operand with exponent adjusted by the second.
    841       Equivalently, return the first operand multiplied by ``10**other``.  The
    842       second operand must be an integer.
    843 
    844    .. method:: shift(other, context=None)
    845 
    846       Return the result of shifting the digits of the first operand by an amount
    847       specified by the second operand.  The second operand must be an integer in
    848       the range -precision through precision.  The absolute value of the second
    849       operand gives the number of places to shift.  If the second operand is
    850       positive then the shift is to the left; otherwise the shift is to the
    851       right.  Digits shifted into the coefficient are zeros.  The sign and
    852       exponent of the first operand are unchanged.
    853 
    854    .. method:: sqrt(context=None)
    855 
    856       Return the square root of the argument to full precision.
    857 
    858 
    859    .. method:: to_eng_string(context=None)
    860 
    861       Convert to a string, using engineering notation if an exponent is needed.
    862 
    863       Engineering notation has an exponent which is a multiple of 3.  This
    864       can leave up to 3 digits to the left of the decimal place and may
    865       require the addition of either one or two trailing zeros.
    866 
    867       For example, this converts ``Decimal('123E+1')`` to ``Decimal('1.23E+3')``.
    868 
    869    .. method:: to_integral(rounding=None, context=None)
    870 
    871       Identical to the :meth:`to_integral_value` method.  The ``to_integral``
    872       name has been kept for compatibility with older versions.
    873 
    874    .. method:: to_integral_exact(rounding=None, context=None)
    875 
    876       Round to the nearest integer, signaling :const:`Inexact` or
    877       :const:`Rounded` as appropriate if rounding occurs.  The rounding mode is
    878       determined by the ``rounding`` parameter if given, else by the given
    879       ``context``.  If neither parameter is given then the rounding mode of the
    880       current context is used.
    881 
    882    .. method:: to_integral_value(rounding=None, context=None)
    883 
    884       Round to the nearest integer without signaling :const:`Inexact` or
    885       :const:`Rounded`.  If given, applies *rounding*; otherwise, uses the
    886       rounding method in either the supplied *context* or the current context.
    887 
    888 
    889 .. _logical_operands_label:
    890 
    891 Logical operands
    892 ^^^^^^^^^^^^^^^^
    893 
    894 The :meth:`logical_and`, :meth:`logical_invert`, :meth:`logical_or`,
    895 and :meth:`logical_xor` methods expect their arguments to be *logical
    896 operands*.  A *logical operand* is a :class:`Decimal` instance whose
    897 exponent and sign are both zero, and whose digits are all either
    898 :const:`0` or :const:`1`.
    899 
    900 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    901 
    902 
    903 .. _decimal-context:
    904 
    905 Context objects
    906 ---------------
    907 
    908 Contexts are environments for arithmetic operations.  They govern precision, set
    909 rules for rounding, determine which signals are treated as exceptions, and limit
    910 the range for exponents.
    911 
    912 Each thread has its own current context which is accessed or changed using the
    913 :func:`getcontext` and :func:`setcontext` functions:
    914 
    915 
    916 .. function:: getcontext()
    917 
    918    Return the current context for the active thread.
    919 
    920 
    921 .. function:: setcontext(c)
    922 
    923    Set the current context for the active thread to *c*.
    924 
    925 You can also use the :keyword:`with` statement and the :func:`localcontext`
    926 function to temporarily change the active context.
    927 
    928 .. function:: localcontext(ctx=None)
    929 
    930    Return a context manager that will set the current context for the active thread
    931    to a copy of *ctx* on entry to the with-statement and restore the previous context
    932    when exiting the with-statement. If no context is specified, a copy of the
    933    current context is used.
    934 
    935    For example, the following code sets the current decimal precision to 42 places,
    936    performs a calculation, and then automatically restores the previous context::
    937 
    938       from decimal import localcontext
    939 
    940       with localcontext() as ctx:
    941           ctx.prec = 42   # Perform a high precision calculation
    942           s = calculate_something()
    943       s = +s  # Round the final result back to the default precision
    944 
    945 New contexts can also be created using the :class:`Context` constructor
    946 described below. In addition, the module provides three pre-made contexts:
    947 
    948 
    949 .. class:: BasicContext
    950 
    951    This is a standard context defined by the General Decimal Arithmetic
    952    Specification.  Precision is set to nine.  Rounding is set to
    953    :const:`ROUND_HALF_UP`.  All flags are cleared.  All traps are enabled (treated
    954    as exceptions) except :const:`Inexact`, :const:`Rounded`, and
    955    :const:`Subnormal`.
    956 
    957    Because many of the traps are enabled, this context is useful for debugging.
    958 
    959 
    960 .. class:: ExtendedContext
    961 
    962    This is a standard context defined by the General Decimal Arithmetic
    963    Specification.  Precision is set to nine.  Rounding is set to
    964    :const:`ROUND_HALF_EVEN`.  All flags are cleared.  No traps are enabled (so that
    965    exceptions are not raised during computations).
    966 
    967    Because the traps are disabled, this context is useful for applications that
    968    prefer to have result value of :const:`NaN` or :const:`Infinity` instead of
    969    raising exceptions.  This allows an application to complete a run in the
    970    presence of conditions that would otherwise halt the program.
    971 
    972 
    973 .. class:: DefaultContext
    974 
    975    This context is used by the :class:`Context` constructor as a prototype for new
    976    contexts.  Changing a field (such a precision) has the effect of changing the
    977    default for new contexts created by the :class:`Context` constructor.
    978 
    979    This context is most useful in multi-threaded environments.  Changing one of the
    980    fields before threads are started has the effect of setting system-wide
    981    defaults.  Changing the fields after threads have started is not recommended as
    982    it would require thread synchronization to prevent race conditions.
    983 
    984    In single threaded environments, it is preferable to not use this context at
    985    all.  Instead, simply create contexts explicitly as described below.
    986 
    987    The default values are :attr:`prec`\ =\ :const:`28`,
    988    :attr:`rounding`\ =\ :const:`ROUND_HALF_EVEN`,
    989    and enabled traps for :class:`Overflow`, :class:`InvalidOperation`, and
    990    :class:`DivisionByZero`.
    991 
    992 In addition to the three supplied contexts, new contexts can be created with the
    993 :class:`Context` constructor.
    994 
    995 
    996 .. class:: Context(prec=None, rounding=None, Emin=None, Emax=None, capitals=None, clamp=None, flags=None, traps=None)
    997 
    998    Creates a new context.  If a field is not specified or is :const:`None`, the
    999    default values are copied from the :const:`DefaultContext`.  If the *flags*
   1000    field is not specified or is :const:`None`, all flags are cleared.
   1001 
   1002    *prec* is an integer in the range [:const:`1`, :const:`MAX_PREC`] that sets
   1003    the precision for arithmetic operations in the context.
   1004 
   1005    The *rounding* option is one of the constants listed in the section
   1006    `Rounding Modes`_.
   1007 
   1008    The *traps* and *flags* fields list any signals to be set. Generally, new
   1009    contexts should only set traps and leave the flags clear.
   1010 
   1011    The *Emin* and *Emax* fields are integers specifying the outer limits allowable
   1012    for exponents. *Emin* must be in the range [:const:`MIN_EMIN`, :const:`0`],
   1013    *Emax* in the range [:const:`0`, :const:`MAX_EMAX`].
   1014 
   1015    The *capitals* field is either :const:`0` or :const:`1` (the default). If set to
   1016    :const:`1`, exponents are printed with a capital :const:`E`; otherwise, a
   1017    lowercase :const:`e` is used: :const:`Decimal('6.02e+23')`.
   1018 
   1019    The *clamp* field is either :const:`0` (the default) or :const:`1`.
   1020    If set to :const:`1`, the exponent ``e`` of a :class:`Decimal`
   1021    instance representable in this context is strictly limited to the
   1022    range ``Emin - prec + 1 <= e <= Emax - prec + 1``.  If *clamp* is
   1023    :const:`0` then a weaker condition holds: the adjusted exponent of
   1024    the :class:`Decimal` instance is at most ``Emax``.  When *clamp* is
   1025    :const:`1`, a large normal number will, where possible, have its
   1026    exponent reduced and a corresponding number of zeros added to its
   1027    coefficient, in order to fit the exponent constraints; this
   1028    preserves the value of the number but loses information about
   1029    significant trailing zeros.  For example::
   1030 
   1031       >>> Context(prec=6, Emax=999, clamp=1).create_decimal('1.23e999')
   1032       Decimal('1.23000E+999')
   1033 
   1034    A *clamp* value of :const:`1` allows compatibility with the
   1035    fixed-width decimal interchange formats specified in IEEE 754.
   1036 
   1037    The :class:`Context` class defines several general purpose methods as well as
   1038    a large number of methods for doing arithmetic directly in a given context.
   1039    In addition, for each of the :class:`Decimal` methods described above (with
   1040    the exception of the :meth:`adjusted` and :meth:`as_tuple` methods) there is
   1041    a corresponding :class:`Context` method.  For example, for a :class:`Context`
   1042    instance ``C`` and :class:`Decimal` instance ``x``, ``C.exp(x)`` is
   1043    equivalent to ``x.exp(context=C)``.  Each :class:`Context` method accepts a
   1044    Python integer (an instance of :class:`int`) anywhere that a
   1045    Decimal instance is accepted.
   1046 
   1047 
   1048    .. method:: clear_flags()
   1049 
   1050       Resets all of the flags to :const:`0`.
   1051 
   1052    .. method:: clear_traps()
   1053 
   1054       Resets all of the traps to :const:`0`.
   1055 
   1056       .. versionadded:: 3.3
   1057 
   1058    .. method:: copy()
   1059 
   1060       Return a duplicate of the context.
   1061 
   1062    .. method:: copy_decimal(num)
   1063 
   1064       Return a copy of the Decimal instance num.
   1065 
   1066    .. method:: create_decimal(num)
   1067 
   1068       Creates a new Decimal instance from *num* but using *self* as
   1069       context. Unlike the :class:`Decimal` constructor, the context precision,
   1070       rounding method, flags, and traps are applied to the conversion.
   1071 
   1072       This is useful because constants are often given to a greater precision
   1073       than is needed by the application.  Another benefit is that rounding
   1074       immediately eliminates unintended effects from digits beyond the current
   1075       precision. In the following example, using unrounded inputs means that
   1076       adding zero to a sum can change the result:
   1077 
   1078       .. doctest:: newcontext
   1079 
   1080          >>> getcontext().prec = 3
   1081          >>> Decimal('3.4445') + Decimal('1.0023')
   1082          Decimal('4.45')
   1083          >>> Decimal('3.4445') + Decimal(0) + Decimal('1.0023')
   1084          Decimal('4.44')
   1085 
   1086       This method implements the to-number operation of the IBM specification.
   1087       If the argument is a string, no leading or trailing whitespace or
   1088       underscores are permitted.
   1089 
   1090    .. method:: create_decimal_from_float(f)
   1091 
   1092       Creates a new Decimal instance from a float *f* but rounding using *self*
   1093       as the context.  Unlike the :meth:`Decimal.from_float` class method,
   1094       the context precision, rounding method, flags, and traps are applied to
   1095       the conversion.
   1096 
   1097       .. doctest::
   1098 
   1099          >>> context = Context(prec=5, rounding=ROUND_DOWN)
   1100          >>> context.create_decimal_from_float(math.pi)
   1101          Decimal('3.1415')
   1102          >>> context = Context(prec=5, traps=[Inexact])
   1103          >>> context.create_decimal_from_float(math.pi)
   1104          Traceback (most recent call last):
   1105              ...
   1106          decimal.Inexact: None
   1107 
   1108       .. versionadded:: 3.1
   1109 
   1110    .. method:: Etiny()
   1111 
   1112       Returns a value equal to ``Emin - prec + 1`` which is the minimum exponent
   1113       value for subnormal results.  When underflow occurs, the exponent is set
   1114       to :const:`Etiny`.
   1115 
   1116    .. method:: Etop()
   1117 
   1118       Returns a value equal to ``Emax - prec + 1``.
   1119 
   1120    The usual approach to working with decimals is to create :class:`Decimal`
   1121    instances and then apply arithmetic operations which take place within the
   1122    current context for the active thread.  An alternative approach is to use
   1123    context methods for calculating within a specific context.  The methods are
   1124    similar to those for the :class:`Decimal` class and are only briefly
   1125    recounted here.
   1126 
   1127 
   1128    .. method:: abs(x)
   1129 
   1130       Returns the absolute value of *x*.
   1131 
   1132 
   1133    .. method:: add(x, y)
   1134 
   1135       Return the sum of *x* and *y*.
   1136 
   1137 
   1138    .. method:: canonical(x)
   1139 
   1140       Returns the same Decimal object *x*.
   1141 
   1142 
   1143    .. method:: compare(x, y)
   1144 
   1145       Compares *x* and *y* numerically.
   1146 
   1147 
   1148    .. method:: compare_signal(x, y)
   1149 
   1150       Compares the values of the two operands numerically.
   1151 
   1152 
   1153    .. method:: compare_total(x, y)
   1154 
   1155       Compares two operands using their abstract representation.
   1156 
   1157 
   1158    .. method:: compare_total_mag(x, y)
   1159 
   1160       Compares two operands using their abstract representation, ignoring sign.
   1161 
   1162 
   1163    .. method:: copy_abs(x)
   1164 
   1165       Returns a copy of *x* with the sign set to 0.
   1166 
   1167 
   1168    .. method:: copy_negate(x)
   1169 
   1170       Returns a copy of *x* with the sign inverted.
   1171 
   1172 
   1173    .. method:: copy_sign(x, y)
   1174 
   1175       Copies the sign from *y* to *x*.
   1176 
   1177 
   1178    .. method:: divide(x, y)
   1179 
   1180       Return *x* divided by *y*.
   1181 
   1182 
   1183    .. method:: divide_int(x, y)
   1184 
   1185       Return *x* divided by *y*, truncated to an integer.
   1186 
   1187 
   1188    .. method:: divmod(x, y)
   1189 
   1190       Divides two numbers and returns the integer part of the result.
   1191 
   1192 
   1193    .. method:: exp(x)
   1194 
   1195       Returns `e ** x`.
   1196 
   1197 
   1198    .. method:: fma(x, y, z)
   1199 
   1200       Returns *x* multiplied by *y*, plus *z*.
   1201 
   1202 
   1203    .. method:: is_canonical(x)
   1204 
   1205       Returns ``True`` if *x* is canonical; otherwise returns ``False``.
   1206 
   1207 
   1208    .. method:: is_finite(x)
   1209 
   1210       Returns ``True`` if *x* is finite; otherwise returns ``False``.
   1211 
   1212 
   1213    .. method:: is_infinite(x)
   1214 
   1215       Returns ``True`` if *x* is infinite; otherwise returns ``False``.
   1216 
   1217 
   1218    .. method:: is_nan(x)
   1219 
   1220       Returns ``True`` if *x* is a qNaN or sNaN; otherwise returns ``False``.
   1221 
   1222 
   1223    .. method:: is_normal(x)
   1224 
   1225       Returns ``True`` if *x* is a normal number; otherwise returns ``False``.
   1226 
   1227 
   1228    .. method:: is_qnan(x)
   1229 
   1230       Returns ``True`` if *x* is a quiet NaN; otherwise returns ``False``.
   1231 
   1232 
   1233    .. method:: is_signed(x)
   1234 
   1235       Returns ``True`` if *x* is negative; otherwise returns ``False``.
   1236 
   1237 
   1238    .. method:: is_snan(x)
   1239 
   1240       Returns ``True`` if *x* is a signaling NaN; otherwise returns ``False``.
   1241 
   1242 
   1243    .. method:: is_subnormal(x)
   1244 
   1245       Returns ``True`` if *x* is subnormal; otherwise returns ``False``.
   1246 
   1247 
   1248    .. method:: is_zero(x)
   1249 
   1250       Returns ``True`` if *x* is a zero; otherwise returns ``False``.
   1251 
   1252 
   1253    .. method:: ln(x)
   1254 
   1255       Returns the natural (base e) logarithm of *x*.
   1256 
   1257 
   1258    .. method:: log10(x)
   1259 
   1260       Returns the base 10 logarithm of *x*.
   1261 
   1262 
   1263    .. method:: logb(x)
   1264 
   1265        Returns the exponent of the magnitude of the operand's MSD.
   1266 
   1267 
   1268    .. method:: logical_and(x, y)
   1269 
   1270       Applies the logical operation *and* between each operand's digits.
   1271 
   1272 
   1273    .. method:: logical_invert(x)
   1274 
   1275       Invert all the digits in *x*.
   1276 
   1277 
   1278    .. method:: logical_or(x, y)
   1279 
   1280       Applies the logical operation *or* between each operand's digits.
   1281 
   1282 
   1283    .. method:: logical_xor(x, y)
   1284 
   1285       Applies the logical operation *xor* between each operand's digits.
   1286 
   1287 
   1288    .. method:: max(x, y)
   1289 
   1290       Compares two values numerically and returns the maximum.
   1291 
   1292 
   1293    .. method:: max_mag(x, y)
   1294 
   1295       Compares the values numerically with their sign ignored.
   1296 
   1297 
   1298    .. method:: min(x, y)
   1299 
   1300       Compares two values numerically and returns the minimum.
   1301 
   1302 
   1303    .. method:: min_mag(x, y)
   1304 
   1305       Compares the values numerically with their sign ignored.
   1306 
   1307 
   1308    .. method:: minus(x)
   1309 
   1310       Minus corresponds to the unary prefix minus operator in Python.
   1311 
   1312 
   1313    .. method:: multiply(x, y)
   1314 
   1315       Return the product of *x* and *y*.
   1316 
   1317 
   1318    .. method:: next_minus(x)
   1319 
   1320       Returns the largest representable number smaller than *x*.
   1321 
   1322 
   1323    .. method:: next_plus(x)
   1324 
   1325       Returns the smallest representable number larger than *x*.
   1326 
   1327 
   1328    .. method:: next_toward(x, y)
   1329 
   1330       Returns the number closest to *x*, in direction towards *y*.
   1331 
   1332 
   1333    .. method:: normalize(x)
   1334 
   1335       Reduces *x* to its simplest form.
   1336 
   1337 
   1338    .. method:: number_class(x)
   1339 
   1340       Returns an indication of the class of *x*.
   1341 
   1342 
   1343    .. method:: plus(x)
   1344 
   1345       Plus corresponds to the unary prefix plus operator in Python.  This
   1346       operation applies the context precision and rounding, so it is *not* an
   1347       identity operation.
   1348 
   1349 
   1350    .. method:: power(x, y, modulo=None)
   1351 
   1352       Return ``x`` to the power of ``y``, reduced modulo ``modulo`` if given.
   1353 
   1354       With two arguments, compute ``x**y``.  If ``x`` is negative then ``y``
   1355       must be integral.  The result will be inexact unless ``y`` is integral and
   1356       the result is finite and can be expressed exactly in 'precision' digits.
   1357       The rounding mode of the context is used. Results are always correctly-rounded
   1358       in the Python version.
   1359 
   1360       .. versionchanged:: 3.3
   1361          The C module computes :meth:`power` in terms of the correctly-rounded
   1362          :meth:`exp` and :meth:`ln` functions. The result is well-defined but
   1363          only "almost always correctly-rounded".
   1364 
   1365       With three arguments, compute ``(x**y) % modulo``.  For the three argument
   1366       form, the following restrictions on the arguments hold:
   1367 
   1368          - all three arguments must be integral
   1369          - ``y`` must be nonnegative
   1370          - at least one of ``x`` or ``y`` must be nonzero
   1371          - ``modulo`` must be nonzero and have at most 'precision' digits
   1372 
   1373       The value resulting from ``Context.power(x, y, modulo)`` is
   1374       equal to the value that would be obtained by computing ``(x**y)
   1375       % modulo`` with unbounded precision, but is computed more
   1376       efficiently.  The exponent of the result is zero, regardless of
   1377       the exponents of ``x``, ``y`` and ``modulo``.  The result is
   1378       always exact.
   1379 
   1380 
   1381    .. method:: quantize(x, y)
   1382 
   1383       Returns a value equal to *x* (rounded), having the exponent of *y*.
   1384 
   1385 
   1386    .. method:: radix()
   1387 
   1388       Just returns 10, as this is Decimal, :)
   1389 
   1390 
   1391    .. method:: remainder(x, y)
   1392 
   1393       Returns the remainder from integer division.
   1394 
   1395       The sign of the result, if non-zero, is the same as that of the original
   1396       dividend.
   1397 
   1398 
   1399    .. method:: remainder_near(x, y)
   1400 
   1401       Returns ``x - y * n``, where *n* is the integer nearest the exact value
   1402       of ``x / y`` (if the result is 0 then its sign will be the sign of *x*).
   1403 
   1404 
   1405    .. method:: rotate(x, y)
   1406 
   1407       Returns a rotated copy of *x*, *y* times.
   1408 
   1409 
   1410    .. method:: same_quantum(x, y)
   1411 
   1412       Returns ``True`` if the two operands have the same exponent.
   1413 
   1414 
   1415    .. method:: scaleb (x, y)
   1416 
   1417       Returns the first operand after adding the second value its exp.
   1418 
   1419 
   1420    .. method:: shift(x, y)
   1421 
   1422       Returns a shifted copy of *x*, *y* times.
   1423 
   1424 
   1425    .. method:: sqrt(x)
   1426 
   1427       Square root of a non-negative number to context precision.
   1428 
   1429 
   1430    .. method:: subtract(x, y)
   1431 
   1432       Return the difference between *x* and *y*.
   1433 
   1434 
   1435    .. method:: to_eng_string(x)
   1436 
   1437       Convert to a string, using engineering notation if an exponent is needed.
   1438 
   1439       Engineering notation has an exponent which is a multiple of 3.  This
   1440       can leave up to 3 digits to the left of the decimal place and may
   1441       require the addition of either one or two trailing zeros.
   1442 
   1443 
   1444    .. method:: to_integral_exact(x)
   1445 
   1446       Rounds to an integer.
   1447 
   1448 
   1449    .. method:: to_sci_string(x)
   1450 
   1451       Converts a number to a string using scientific notation.
   1452 
   1453 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1454 
   1455 .. _decimal-rounding-modes:
   1456 
   1457 Constants
   1458 ---------
   1459 
   1460 The constants in this section are only relevant for the C module. They
   1461 are also included in the pure Python version for compatibility.
   1462 
   1463 +---------------------+---------------------+-------------------------------+
   1464 |                     |       32-bit        |            64-bit             |
   1465 +=====================+=====================+===============================+
   1466 | .. data:: MAX_PREC  | :const:`425000000`  | :const:`999999999999999999`   |
   1467 +---------------------+---------------------+-------------------------------+
   1468 | .. data:: MAX_EMAX  | :const:`425000000`  | :const:`999999999999999999`   |
   1469 +---------------------+---------------------+-------------------------------+
   1470 | .. data:: MIN_EMIN  | :const:`-425000000` | :const:`-999999999999999999`  |
   1471 +---------------------+---------------------+-------------------------------+
   1472 | .. data:: MIN_ETINY | :const:`-849999999` | :const:`-1999999999999999997` |
   1473 +---------------------+---------------------+-------------------------------+
   1474 
   1475 
   1476 .. data:: HAVE_THREADS
   1477 
   1478    The default value is ``True``. If Python is compiled without threads, the
   1479    C version automatically disables the expensive thread local context
   1480    machinery. In this case, the value is ``False``.
   1481 
   1482 Rounding modes
   1483 --------------
   1484 
   1485 .. data:: ROUND_CEILING
   1486 
   1487    Round towards :const:`Infinity`.
   1488 
   1489 .. data:: ROUND_DOWN
   1490 
   1491    Round towards zero.
   1492 
   1493 .. data:: ROUND_FLOOR
   1494 
   1495    Round towards :const:`-Infinity`.
   1496 
   1497 .. data:: ROUND_HALF_DOWN
   1498 
   1499    Round to nearest with ties going towards zero.
   1500 
   1501 .. data:: ROUND_HALF_EVEN
   1502 
   1503    Round to nearest with ties going to nearest even integer.
   1504 
   1505 .. data:: ROUND_HALF_UP
   1506 
   1507    Round to nearest with ties going away from zero.
   1508 
   1509 .. data:: ROUND_UP
   1510 
   1511    Round away from zero.
   1512 
   1513 .. data:: ROUND_05UP
   1514 
   1515    Round away from zero if last digit after rounding towards zero would have
   1516    been 0 or 5; otherwise round towards zero.
   1517 
   1518 
   1519 .. _decimal-signals:
   1520 
   1521 Signals
   1522 -------
   1523 
   1524 Signals represent conditions that arise during computation. Each corresponds to
   1525 one context flag and one context trap enabler.
   1526 
   1527 The context flag is set whenever the condition is encountered. After the
   1528 computation, flags may be checked for informational purposes (for instance, to
   1529 determine whether a computation was exact). After checking the flags, be sure to
   1530 clear all flags before starting the next computation.
   1531 
   1532 If the context's trap enabler is set for the signal, then the condition causes a
   1533 Python exception to be raised.  For example, if the :class:`DivisionByZero` trap
   1534 is set, then a :exc:`DivisionByZero` exception is raised upon encountering the
   1535 condition.
   1536 
   1537 
   1538 .. class:: Clamped
   1539 
   1540    Altered an exponent to fit representation constraints.
   1541 
   1542    Typically, clamping occurs when an exponent falls outside the context's
   1543    :attr:`Emin` and :attr:`Emax` limits.  If possible, the exponent is reduced to
   1544    fit by adding zeros to the coefficient.
   1545 
   1546 
   1547 .. class:: DecimalException
   1548 
   1549    Base class for other signals and a subclass of :exc:`ArithmeticError`.
   1550 
   1551 
   1552 .. class:: DivisionByZero
   1553 
   1554    Signals the division of a non-infinite number by zero.
   1555 
   1556    Can occur with division, modulo division, or when raising a number to a negative
   1557    power.  If this signal is not trapped, returns :const:`Infinity` or
   1558    :const:`-Infinity` with the sign determined by the inputs to the calculation.
   1559 
   1560 
   1561 .. class:: Inexact
   1562 
   1563    Indicates that rounding occurred and the result is not exact.
   1564 
   1565    Signals when non-zero digits were discarded during rounding. The rounded result
   1566    is returned.  The signal flag or trap is used to detect when results are
   1567    inexact.
   1568 
   1569 
   1570 .. class:: InvalidOperation
   1571 
   1572    An invalid operation was performed.
   1573 
   1574    Indicates that an operation was requested that does not make sense. If not
   1575    trapped, returns :const:`NaN`.  Possible causes include::
   1576 
   1577       Infinity - Infinity
   1578       0 * Infinity
   1579       Infinity / Infinity
   1580       x % 0
   1581       Infinity % x
   1582       sqrt(-x) and x > 0
   1583       0 ** 0
   1584       x ** (non-integer)
   1585       x ** Infinity
   1586 
   1587 
   1588 .. class:: Overflow
   1589 
   1590    Numerical overflow.
   1591 
   1592    Indicates the exponent is larger than :attr:`Emax` after rounding has
   1593    occurred.  If not trapped, the result depends on the rounding mode, either
   1594    pulling inward to the largest representable finite number or rounding outward
   1595    to :const:`Infinity`.  In either case, :class:`Inexact` and :class:`Rounded`
   1596    are also signaled.
   1597 
   1598 
   1599 .. class:: Rounded
   1600 
   1601    Rounding occurred though possibly no information was lost.
   1602 
   1603    Signaled whenever rounding discards digits; even if those digits are zero
   1604    (such as rounding :const:`5.00` to :const:`5.0`).  If not trapped, returns
   1605    the result unchanged.  This signal is used to detect loss of significant
   1606    digits.
   1607 
   1608 
   1609 .. class:: Subnormal
   1610 
   1611    Exponent was lower than :attr:`Emin` prior to rounding.
   1612 
   1613    Occurs when an operation result is subnormal (the exponent is too small). If
   1614    not trapped, returns the result unchanged.
   1615 
   1616 
   1617 .. class:: Underflow
   1618 
   1619    Numerical underflow with result rounded to zero.
   1620 
   1621    Occurs when a subnormal result is pushed to zero by rounding. :class:`Inexact`
   1622    and :class:`Subnormal` are also signaled.
   1623 
   1624 
   1625 .. class:: FloatOperation
   1626 
   1627     Enable stricter semantics for mixing floats and Decimals.
   1628 
   1629     If the signal is not trapped (default), mixing floats and Decimals is
   1630     permitted in the :class:`~decimal.Decimal` constructor,
   1631     :meth:`~decimal.Context.create_decimal` and all comparison operators.
   1632     Both conversion and comparisons are exact. Any occurrence of a mixed
   1633     operation is silently recorded by setting :exc:`FloatOperation` in the
   1634     context flags. Explicit conversions with :meth:`~decimal.Decimal.from_float`
   1635     or :meth:`~decimal.Context.create_decimal_from_float` do not set the flag.
   1636 
   1637     Otherwise (the signal is trapped), only equality comparisons and explicit
   1638     conversions are silent. All other mixed operations raise :exc:`FloatOperation`.
   1639 
   1640 
   1641 The following table summarizes the hierarchy of signals::
   1642 
   1643    exceptions.ArithmeticError(exceptions.Exception)
   1644        DecimalException
   1645            Clamped
   1646            DivisionByZero(DecimalException, exceptions.ZeroDivisionError)
   1647            Inexact
   1648                Overflow(Inexact, Rounded)
   1649                Underflow(Inexact, Rounded, Subnormal)
   1650            InvalidOperation
   1651            Rounded
   1652            Subnormal
   1653            FloatOperation(DecimalException, exceptions.TypeError)
   1654 
   1655 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1656 
   1657 
   1658 
   1659 .. _decimal-notes:
   1660 
   1661 Floating Point Notes
   1662 --------------------
   1663 
   1664 
   1665 Mitigating round-off error with increased precision
   1666 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
   1667 
   1668 The use of decimal floating point eliminates decimal representation error
   1669 (making it possible to represent :const:`0.1` exactly); however, some operations
   1670 can still incur round-off error when non-zero digits exceed the fixed precision.
   1671 
   1672 The effects of round-off error can be amplified by the addition or subtraction
   1673 of nearly offsetting quantities resulting in loss of significance.  Knuth
   1674 provides two instructive examples where rounded floating point arithmetic with
   1675 insufficient precision causes the breakdown of the associative and distributive
   1676 properties of addition:
   1677 
   1678 .. doctest:: newcontext
   1679 
   1680    # Examples from Seminumerical Algorithms, Section 4.2.2.
   1681    >>> from decimal import Decimal, getcontext
   1682    >>> getcontext().prec = 8
   1683 
   1684    >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
   1685    >>> (u + v) + w
   1686    Decimal('9.5111111')
   1687    >>> u + (v + w)
   1688    Decimal('10')
   1689 
   1690    >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
   1691    >>> (u*v) + (u*w)
   1692    Decimal('0.01')
   1693    >>> u * (v+w)
   1694    Decimal('0.0060000')
   1695 
   1696 The :mod:`decimal` module makes it possible to restore the identities by
   1697 expanding the precision sufficiently to avoid loss of significance:
   1698 
   1699 .. doctest:: newcontext
   1700 
   1701    >>> getcontext().prec = 20
   1702    >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
   1703    >>> (u + v) + w
   1704    Decimal('9.51111111')
   1705    >>> u + (v + w)
   1706    Decimal('9.51111111')
   1707    >>>
   1708    >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
   1709    >>> (u*v) + (u*w)
   1710    Decimal('0.0060000')
   1711    >>> u * (v+w)
   1712    Decimal('0.0060000')
   1713 
   1714 
   1715 Special values
   1716 ^^^^^^^^^^^^^^
   1717 
   1718 The number system for the :mod:`decimal` module provides special values
   1719 including :const:`NaN`, :const:`sNaN`, :const:`-Infinity`, :const:`Infinity`,
   1720 and two zeros, :const:`+0` and :const:`-0`.
   1721 
   1722 Infinities can be constructed directly with:  ``Decimal('Infinity')``. Also,
   1723 they can arise from dividing by zero when the :exc:`DivisionByZero` signal is
   1724 not trapped.  Likewise, when the :exc:`Overflow` signal is not trapped, infinity
   1725 can result from rounding beyond the limits of the largest representable number.
   1726 
   1727 The infinities are signed (affine) and can be used in arithmetic operations
   1728 where they get treated as very large, indeterminate numbers.  For instance,
   1729 adding a constant to infinity gives another infinite result.
   1730 
   1731 Some operations are indeterminate and return :const:`NaN`, or if the
   1732 :exc:`InvalidOperation` signal is trapped, raise an exception.  For example,
   1733 ``0/0`` returns :const:`NaN` which means "not a number".  This variety of
   1734 :const:`NaN` is quiet and, once created, will flow through other computations
   1735 always resulting in another :const:`NaN`.  This behavior can be useful for a
   1736 series of computations that occasionally have missing inputs --- it allows the
   1737 calculation to proceed while flagging specific results as invalid.
   1738 
   1739 A variant is :const:`sNaN` which signals rather than remaining quiet after every
   1740 operation.  This is a useful return value when an invalid result needs to
   1741 interrupt a calculation for special handling.
   1742 
   1743 The behavior of Python's comparison operators can be a little surprising where a
   1744 :const:`NaN` is involved.  A test for equality where one of the operands is a
   1745 quiet or signaling :const:`NaN` always returns :const:`False` (even when doing
   1746 ``Decimal('NaN')==Decimal('NaN')``), while a test for inequality always returns
   1747 :const:`True`.  An attempt to compare two Decimals using any of the ``<``,
   1748 ``<=``, ``>`` or ``>=`` operators will raise the :exc:`InvalidOperation` signal
   1749 if either operand is a :const:`NaN`, and return :const:`False` if this signal is
   1750 not trapped.  Note that the General Decimal Arithmetic specification does not
   1751 specify the behavior of direct comparisons; these rules for comparisons
   1752 involving a :const:`NaN` were taken from the IEEE 854 standard (see Table 3 in
   1753 section 5.7).  To ensure strict standards-compliance, use the :meth:`compare`
   1754 and :meth:`compare-signal` methods instead.
   1755 
   1756 The signed zeros can result from calculations that underflow. They keep the sign
   1757 that would have resulted if the calculation had been carried out to greater
   1758 precision.  Since their magnitude is zero, both positive and negative zeros are
   1759 treated as equal and their sign is informational.
   1760 
   1761 In addition to the two signed zeros which are distinct yet equal, there are
   1762 various representations of zero with differing precisions yet equivalent in
   1763 value.  This takes a bit of getting used to.  For an eye accustomed to
   1764 normalized floating point representations, it is not immediately obvious that
   1765 the following calculation returns a value equal to zero:
   1766 
   1767    >>> 1 / Decimal('Infinity')
   1768    Decimal('0E-1000026')
   1769 
   1770 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1771 
   1772 
   1773 .. _decimal-threads:
   1774 
   1775 Working with threads
   1776 --------------------
   1777 
   1778 The :func:`getcontext` function accesses a different :class:`Context` object for
   1779 each thread.  Having separate thread contexts means that threads may make
   1780 changes (such as ``getcontext().prec=10``) without interfering with other threads.
   1781 
   1782 Likewise, the :func:`setcontext` function automatically assigns its target to
   1783 the current thread.
   1784 
   1785 If :func:`setcontext` has not been called before :func:`getcontext`, then
   1786 :func:`getcontext` will automatically create a new context for use in the
   1787 current thread.
   1788 
   1789 The new context is copied from a prototype context called *DefaultContext*. To
   1790 control the defaults so that each thread will use the same values throughout the
   1791 application, directly modify the *DefaultContext* object. This should be done
   1792 *before* any threads are started so that there won't be a race condition between
   1793 threads calling :func:`getcontext`. For example::
   1794 
   1795    # Set applicationwide defaults for all threads about to be launched
   1796    DefaultContext.prec = 12
   1797    DefaultContext.rounding = ROUND_DOWN
   1798    DefaultContext.traps = ExtendedContext.traps.copy()
   1799    DefaultContext.traps[InvalidOperation] = 1
   1800    setcontext(DefaultContext)
   1801 
   1802    # Afterwards, the threads can be started
   1803    t1.start()
   1804    t2.start()
   1805    t3.start()
   1806     . . .
   1807 
   1808 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1809 
   1810 
   1811 .. _decimal-recipes:
   1812 
   1813 Recipes
   1814 -------
   1815 
   1816 Here are a few recipes that serve as utility functions and that demonstrate ways
   1817 to work with the :class:`Decimal` class::
   1818 
   1819    def moneyfmt(value, places=2, curr='', sep=',', dp='.',
   1820                 pos='', neg='-', trailneg=''):
   1821        """Convert Decimal to a money formatted string.
   1822 
   1823        places:  required number of places after the decimal point
   1824        curr:    optional currency symbol before the sign (may be blank)
   1825        sep:     optional grouping separator (comma, period, space, or blank)
   1826        dp:      decimal point indicator (comma or period)
   1827                 only specify as blank when places is zero
   1828        pos:     optional sign for positive numbers: '+', space or blank
   1829        neg:     optional sign for negative numbers: '-', '(', space or blank
   1830        trailneg:optional trailing minus indicator:  '-', ')', space or blank
   1831 
   1832        >>> d = Decimal('-1234567.8901')
   1833        >>> moneyfmt(d, curr='$')
   1834        '-$1,234,567.89'
   1835        >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')
   1836        '1.234.568-'
   1837        >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
   1838        '($1,234,567.89)'
   1839        >>> moneyfmt(Decimal(123456789), sep=' ')
   1840        '123 456 789.00'
   1841        >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
   1842        '<0.02>'
   1843 
   1844        """
   1845        q = Decimal(10) ** -places      # 2 places --> '0.01'
   1846        sign, digits, exp = value.quantize(q).as_tuple()
   1847        result = []
   1848        digits = list(map(str, digits))
   1849        build, next = result.append, digits.pop
   1850        if sign:
   1851            build(trailneg)
   1852        for i in range(places):
   1853            build(next() if digits else '0')
   1854        if places:
   1855            build(dp)
   1856        if not digits:
   1857            build('0')
   1858        i = 0
   1859        while digits:
   1860            build(next())
   1861            i += 1
   1862            if i == 3 and digits:
   1863                i = 0
   1864                build(sep)
   1865        build(curr)
   1866        build(neg if sign else pos)
   1867        return ''.join(reversed(result))
   1868 
   1869    def pi():
   1870        """Compute Pi to the current precision.
   1871 
   1872        >>> print(pi())
   1873        3.141592653589793238462643383
   1874 
   1875        """
   1876        getcontext().prec += 2  # extra digits for intermediate steps
   1877        three = Decimal(3)      # substitute "three=3.0" for regular floats
   1878        lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
   1879        while s != lasts:
   1880            lasts = s
   1881            n, na = n+na, na+8
   1882            d, da = d+da, da+32
   1883            t = (t * n) / d
   1884            s += t
   1885        getcontext().prec -= 2
   1886        return +s               # unary plus applies the new precision
   1887 
   1888    def exp(x):
   1889        """Return e raised to the power of x.  Result type matches input type.
   1890 
   1891        >>> print(exp(Decimal(1)))
   1892        2.718281828459045235360287471
   1893        >>> print(exp(Decimal(2)))
   1894        7.389056098930650227230427461
   1895        >>> print(exp(2.0))
   1896        7.38905609893
   1897        >>> print(exp(2+0j))
   1898        (7.38905609893+0j)
   1899 
   1900        """
   1901        getcontext().prec += 2
   1902        i, lasts, s, fact, num = 0, 0, 1, 1, 1
   1903        while s != lasts:
   1904            lasts = s
   1905            i += 1
   1906            fact *= i
   1907            num *= x
   1908            s += num / fact
   1909        getcontext().prec -= 2
   1910        return +s
   1911 
   1912    def cos(x):
   1913        """Return the cosine of x as measured in radians.
   1914 
   1915        The Taylor series approximation works best for a small value of x.
   1916        For larger values, first compute x = x % (2 * pi).
   1917 
   1918        >>> print(cos(Decimal('0.5')))
   1919        0.8775825618903727161162815826
   1920        >>> print(cos(0.5))
   1921        0.87758256189
   1922        >>> print(cos(0.5+0j))
   1923        (0.87758256189+0j)
   1924 
   1925        """
   1926        getcontext().prec += 2
   1927        i, lasts, s, fact, num, sign = 0, 0, 1, 1, 1, 1
   1928        while s != lasts:
   1929            lasts = s
   1930            i += 2
   1931            fact *= i * (i-1)
   1932            num *= x * x
   1933            sign *= -1
   1934            s += num / fact * sign
   1935        getcontext().prec -= 2
   1936        return +s
   1937 
   1938    def sin(x):
   1939        """Return the sine of x as measured in radians.
   1940 
   1941        The Taylor series approximation works best for a small value of x.
   1942        For larger values, first compute x = x % (2 * pi).
   1943 
   1944        >>> print(sin(Decimal('0.5')))
   1945        0.4794255386042030002732879352
   1946        >>> print(sin(0.5))
   1947        0.479425538604
   1948        >>> print(sin(0.5+0j))
   1949        (0.479425538604+0j)
   1950 
   1951        """
   1952        getcontext().prec += 2
   1953        i, lasts, s, fact, num, sign = 1, 0, x, 1, x, 1
   1954        while s != lasts:
   1955            lasts = s
   1956            i += 2
   1957            fact *= i * (i-1)
   1958            num *= x * x
   1959            sign *= -1
   1960            s += num / fact * sign
   1961        getcontext().prec -= 2
   1962        return +s
   1963 
   1964 
   1965 .. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
   1966 
   1967 
   1968 .. _decimal-faq:
   1969 
   1970 Decimal FAQ
   1971 -----------
   1972 
   1973 Q. It is cumbersome to type ``decimal.Decimal('1234.5')``.  Is there a way to
   1974 minimize typing when using the interactive interpreter?
   1975 
   1976 A. Some users abbreviate the constructor to just a single letter:
   1977 
   1978    >>> D = decimal.Decimal
   1979    >>> D('1.23') + D('3.45')
   1980    Decimal('4.68')
   1981 
   1982 Q. In a fixed-point application with two decimal places, some inputs have many
   1983 places and need to be rounded.  Others are not supposed to have excess digits
   1984 and need to be validated.  What methods should be used?
   1985 
   1986 A. The :meth:`quantize` method rounds to a fixed number of decimal places. If
   1987 the :const:`Inexact` trap is set, it is also useful for validation:
   1988 
   1989    >>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
   1990 
   1991    >>> # Round to two places
   1992    >>> Decimal('3.214').quantize(TWOPLACES)
   1993    Decimal('3.21')
   1994 
   1995    >>> # Validate that a number does not exceed two places
   1996    >>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
   1997    Decimal('3.21')
   1998 
   1999    >>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
   2000    Traceback (most recent call last):
   2001       ...
   2002    Inexact: None
   2003 
   2004 Q. Once I have valid two place inputs, how do I maintain that invariant
   2005 throughout an application?
   2006 
   2007 A. Some operations like addition, subtraction, and multiplication by an integer
   2008 will automatically preserve fixed point.  Others operations, like division and
   2009 non-integer multiplication, will change the number of decimal places and need to
   2010 be followed-up with a :meth:`quantize` step:
   2011 
   2012     >>> a = Decimal('102.72')           # Initial fixed-point values
   2013     >>> b = Decimal('3.17')
   2014     >>> a + b                           # Addition preserves fixed-point
   2015     Decimal('105.89')
   2016     >>> a - b
   2017     Decimal('99.55')
   2018     >>> a * 42                          # So does integer multiplication
   2019     Decimal('4314.24')
   2020     >>> (a * b).quantize(TWOPLACES)     # Must quantize non-integer multiplication
   2021     Decimal('325.62')
   2022     >>> (b / a).quantize(TWOPLACES)     # And quantize division
   2023     Decimal('0.03')
   2024 
   2025 In developing fixed-point applications, it is convenient to define functions
   2026 to handle the :meth:`quantize` step:
   2027 
   2028     >>> def mul(x, y, fp=TWOPLACES):
   2029     ...     return (x * y).quantize(fp)
   2030     >>> def div(x, y, fp=TWOPLACES):
   2031     ...     return (x / y).quantize(fp)
   2032 
   2033     >>> mul(a, b)                       # Automatically preserve fixed-point
   2034     Decimal('325.62')
   2035     >>> div(b, a)
   2036     Decimal('0.03')
   2037 
   2038 Q. There are many ways to express the same value.  The numbers :const:`200`,
   2039 :const:`200.000`, :const:`2E2`, and :const:`.02E+4` all have the same value at
   2040 various precisions. Is there a way to transform them to a single recognizable
   2041 canonical value?
   2042 
   2043 A. The :meth:`normalize` method maps all equivalent values to a single
   2044 representative:
   2045 
   2046    >>> values = map(Decimal, '200 200.000 2E2 .02E+4'.split())
   2047    >>> [v.normalize() for v in values]
   2048    [Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2')]
   2049 
   2050 Q. Some decimal values always print with exponential notation.  Is there a way
   2051 to get a non-exponential representation?
   2052 
   2053 A. For some values, exponential notation is the only way to express the number
   2054 of significant places in the coefficient.  For example, expressing
   2055 :const:`5.0E+3` as :const:`5000` keeps the value constant but cannot show the
   2056 original's two-place significance.
   2057 
   2058 If an application does not care about tracking significance, it is easy to
   2059 remove the exponent and trailing zeroes, losing significance, but keeping the
   2060 value unchanged:
   2061 
   2062     >>> def remove_exponent(d):
   2063     ...     return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize()
   2064 
   2065     >>> remove_exponent(Decimal('5E+3'))
   2066     Decimal('5000')
   2067 
   2068 Q. Is there a way to convert a regular float to a :class:`Decimal`?
   2069 
   2070 A. Yes, any binary floating point number can be exactly expressed as a
   2071 Decimal though an exact conversion may take more precision than intuition would
   2072 suggest:
   2073 
   2074 .. doctest::
   2075 
   2076     >>> Decimal(math.pi)
   2077     Decimal('3.141592653589793115997963468544185161590576171875')
   2078 
   2079 Q. Within a complex calculation, how can I make sure that I haven't gotten a
   2080 spurious result because of insufficient precision or rounding anomalies.
   2081 
   2082 A. The decimal module makes it easy to test results.  A best practice is to
   2083 re-run calculations using greater precision and with various rounding modes.
   2084 Widely differing results indicate insufficient precision, rounding mode issues,
   2085 ill-conditioned inputs, or a numerically unstable algorithm.
   2086 
   2087 Q. I noticed that context precision is applied to the results of operations but
   2088 not to the inputs.  Is there anything to watch out for when mixing values of
   2089 different precisions?
   2090 
   2091 A. Yes.  The principle is that all values are considered to be exact and so is
   2092 the arithmetic on those values.  Only the results are rounded.  The advantage
   2093 for inputs is that "what you type is what you get".  A disadvantage is that the
   2094 results can look odd if you forget that the inputs haven't been rounded:
   2095 
   2096 .. doctest:: newcontext
   2097 
   2098    >>> getcontext().prec = 3
   2099    >>> Decimal('3.104') + Decimal('2.104')
   2100    Decimal('5.21')
   2101    >>> Decimal('3.104') + Decimal('0.000') + Decimal('2.104')
   2102    Decimal('5.20')
   2103 
   2104 The solution is either to increase precision or to force rounding of inputs
   2105 using the unary plus operation:
   2106 
   2107 .. doctest:: newcontext
   2108 
   2109    >>> getcontext().prec = 3
   2110    >>> +Decimal('1.23456789')      # unary plus triggers rounding
   2111    Decimal('1.23')
   2112 
   2113 Alternatively, inputs can be rounded upon creation using the
   2114 :meth:`Context.create_decimal` method:
   2115 
   2116    >>> Context(prec=5, rounding=ROUND_DOWN).create_decimal('1.2345678')
   2117    Decimal('1.2345')
   2118 
   2119 Q. Is the CPython implementation fast for large numbers?
   2120 
   2121 A. Yes.  In the CPython and PyPy3 implementations, the C/CFFI versions of
   2122 the decimal module integrate the high speed `libmpdec
   2123 <https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html>`_ library for
   2124 arbitrary precision correctly-rounded decimal floating point arithmetic.
   2125 ``libmpdec`` uses `Karatsuba multiplication
   2126 <https://en.wikipedia.org/wiki/Karatsuba_algorithm>`_
   2127 for medium-sized numbers and the `Number Theoretic Transform
   2128 <https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform>`_
   2129 for very large numbers.  However, to realize this performance gain, the
   2130 context needs to be set for unrounded calculations.
   2131 
   2132     >>> c = getcontext()
   2133     >>> c.prec = MAX_PREC
   2134     >>> c.Emax = MAX_EMAX
   2135     >>> c.Emin = MIN_EMIN
   2136 
   2137 .. versionadded:: 3.3