• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
33The :mod:`decimal` module provides support for fast correctly-rounded
34decimal 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
85The module design is centered around three concepts:  the decimal number, the
86context for arithmetic, and signals.
87
88A decimal number is immutable.  It has a sign, coefficient digits, and an
89exponent.  To preserve significance, the coefficient digits do not truncate
90trailing zeros.  Decimals also include special values such as
91:const:`Infinity`, :const:`-Infinity`, and :const:`NaN`.  The standard also
92differentiates :const:`-0` from :const:`+0`.
93
94The context for arithmetic is an environment specifying precision, rounding
95rules, limits on exponents, flags indicating the results of operations, and trap
96enablers which determine whether signals are treated as exceptions.  Rounding
97options 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
101Signals are groups of exceptional conditions arising during the course of
102computation.  Depending on the needs of the application, signals may be ignored,
103considered as informational, or treated as exceptions. The signals in the
104decimal module are: :const:`Clamped`, :const:`InvalidOperation`,
105:const:`DivisionByZero`, :const:`Inexact`, :const:`Rounded`, :const:`Subnormal`,
106:const:`Overflow`, :const:`Underflow` and :const:`FloatOperation`.
107
108For each signal there is a flag and a trap enabler.  When a signal is
109encountered, its flag is set to one, then, if the trap enabler is
110set to one, an exception is raised.  Flags are sticky, so the user needs to
111reset 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
124Quick-start Tutorial
125--------------------
126
127The usual start to using decimals is importing the module, viewing the current
128context with :func:`getcontext` and, if necessary, setting new values for
129precision, 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
139Decimal instances can be constructed from integers, strings, floats, or tuples.
140Construction from an integer or a float performs an exact conversion of the
141value 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
163If the :exc:`FloatOperation` signal is trapped, accidental mixing of
164decimals and floats in constructors or ordering comparisons raises
165an 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
182The significance of a new Decimal is determined solely by the number of digits
183input.  Context precision and rounding only come into play during arithmetic
184operations.
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
199If the internal limits of the C version are exceeded, constructing
200a 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
209Decimals interact well with much of the rest of Python.  Here is a small decimal
210floating 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
241And 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
253The :meth:`quantize` method rounds a number to a fixed exponent.  This method is
254useful for monetary applications that often round results to a fixed number of
255places:
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
262As shown above, the :func:`getcontext` function accesses the current context and
263allows the settings to be changed.  This approach meets the needs of most
264applications.
265
266For more advanced work, it may be useful to create alternate contexts using the
267Context() constructor.  To make an alternate active, use the :func:`setcontext`
268function.
269
270In accordance with the standard, the :mod:`decimal` module provides two ready to
271use standard contexts, :const:`BasicContext` and :const:`ExtendedContext`. The
272former is especially useful for debugging because many of the traps are
273enabled:
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
299Contexts also have signal flags for monitoring exceptional conditions
300encountered during computations.  The flags remain set until explicitly cleared,
301so it is best to clear the flags before each set of monitored computations by
302using 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
312The *flags* entry shows that the rational approximation to :const:`Pi` was
313rounded (digits beyond the context precision were thrown away) and that the
314result is inexact (some of the discarded digits were non-zero).
315
316Individual traps are set using the dictionary in the :attr:`traps` field of a
317context:
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
331Most programs adjust the current context only once, at the beginning of the
332program.  And, in many applications, data is converted to :class:`Decimal` with
333a single cast inside a loop.  With context set and decimals created, the bulk of
334the program manipulates the data no differently than with other Python numeric
335types.
336
337.. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
338
339
340.. _decimal-decimal:
341
342Decimal 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 Devanāgarī 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
891Logical operands
892^^^^^^^^^^^^^^^^
893
894The :meth:`logical_and`, :meth:`logical_invert`, :meth:`logical_or`,
895and :meth:`logical_xor` methods expect their arguments to be *logical
896operands*.  A *logical operand* is a :class:`Decimal` instance whose
897exponent 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
905Context objects
906---------------
907
908Contexts are environments for arithmetic operations.  They govern precision, set
909rules for rounding, determine which signals are treated as exceptions, and limit
910the range for exponents.
911
912Each 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
925You can also use the :keyword:`with` statement and the :func:`localcontext`
926function 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
945New contexts can also be created using the :class:`Context` constructor
946described 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
992In 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
1457Constants
1458---------
1459
1460The constants in this section are only relevant for the C module. They
1461are 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
1482Rounding 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
1521Signals
1522-------
1523
1524Signals represent conditions that arise during computation. Each corresponds to
1525one context flag and one context trap enabler.
1526
1527The context flag is set whenever the condition is encountered. After the
1528computation, flags may be checked for informational purposes (for instance, to
1529determine whether a computation was exact). After checking the flags, be sure to
1530clear all flags before starting the next computation.
1531
1532If the context's trap enabler is set for the signal, then the condition causes a
1533Python exception to be raised.  For example, if the :class:`DivisionByZero` trap
1534is set, then a :exc:`DivisionByZero` exception is raised upon encountering the
1535condition.
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
1641The 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
1661Floating Point Notes
1662--------------------
1663
1664
1665Mitigating round-off error with increased precision
1666^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
1667
1668The use of decimal floating point eliminates decimal representation error
1669(making it possible to represent :const:`0.1` exactly); however, some operations
1670can still incur round-off error when non-zero digits exceed the fixed precision.
1671
1672The effects of round-off error can be amplified by the addition or subtraction
1673of nearly offsetting quantities resulting in loss of significance.  Knuth
1674provides two instructive examples where rounded floating point arithmetic with
1675insufficient precision causes the breakdown of the associative and distributive
1676properties 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
1696The :mod:`decimal` module makes it possible to restore the identities by
1697expanding 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
1715Special values
1716^^^^^^^^^^^^^^
1717
1718The number system for the :mod:`decimal` module provides special values
1719including :const:`NaN`, :const:`sNaN`, :const:`-Infinity`, :const:`Infinity`,
1720and two zeros, :const:`+0` and :const:`-0`.
1721
1722Infinities can be constructed directly with:  ``Decimal('Infinity')``. Also,
1723they can arise from dividing by zero when the :exc:`DivisionByZero` signal is
1724not trapped.  Likewise, when the :exc:`Overflow` signal is not trapped, infinity
1725can result from rounding beyond the limits of the largest representable number.
1726
1727The infinities are signed (affine) and can be used in arithmetic operations
1728where they get treated as very large, indeterminate numbers.  For instance,
1729adding a constant to infinity gives another infinite result.
1730
1731Some 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
1735always resulting in another :const:`NaN`.  This behavior can be useful for a
1736series of computations that occasionally have missing inputs --- it allows the
1737calculation to proceed while flagging specific results as invalid.
1738
1739A variant is :const:`sNaN` which signals rather than remaining quiet after every
1740operation.  This is a useful return value when an invalid result needs to
1741interrupt a calculation for special handling.
1742
1743The 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
1745quiet 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
1749if either operand is a :const:`NaN`, and return :const:`False` if this signal is
1750not trapped.  Note that the General Decimal Arithmetic specification does not
1751specify the behavior of direct comparisons; these rules for comparisons
1752involving a :const:`NaN` were taken from the IEEE 854 standard (see Table 3 in
1753section 5.7).  To ensure strict standards-compliance, use the :meth:`compare`
1754and :meth:`compare-signal` methods instead.
1755
1756The signed zeros can result from calculations that underflow. They keep the sign
1757that would have resulted if the calculation had been carried out to greater
1758precision.  Since their magnitude is zero, both positive and negative zeros are
1759treated as equal and their sign is informational.
1760
1761In addition to the two signed zeros which are distinct yet equal, there are
1762various representations of zero with differing precisions yet equivalent in
1763value.  This takes a bit of getting used to.  For an eye accustomed to
1764normalized floating point representations, it is not immediately obvious that
1765the 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
1775Working with threads
1776--------------------
1777
1778The :func:`getcontext` function accesses a different :class:`Context` object for
1779each thread.  Having separate thread contexts means that threads may make
1780changes (such as ``getcontext().prec=10``) without interfering with other threads.
1781
1782Likewise, the :func:`setcontext` function automatically assigns its target to
1783the current thread.
1784
1785If :func:`setcontext` has not been called before :func:`getcontext`, then
1786:func:`getcontext` will automatically create a new context for use in the
1787current thread.
1788
1789The new context is copied from a prototype context called *DefaultContext*. To
1790control the defaults so that each thread will use the same values throughout the
1791application, 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
1793threads 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
1813Recipes
1814-------
1815
1816Here are a few recipes that serve as utility functions and that demonstrate ways
1817to 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
1970Decimal FAQ
1971-----------
1972
1973Q. It is cumbersome to type ``decimal.Decimal('1234.5')``.  Is there a way to
1974minimize typing when using the interactive interpreter?
1975
1976A. 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
1982Q. In a fixed-point application with two decimal places, some inputs have many
1983places and need to be rounded.  Others are not supposed to have excess digits
1984and need to be validated.  What methods should be used?
1985
1986A. The :meth:`quantize` method rounds to a fixed number of decimal places. If
1987the :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
2004Q. Once I have valid two place inputs, how do I maintain that invariant
2005throughout an application?
2006
2007A. Some operations like addition, subtraction, and multiplication by an integer
2008will automatically preserve fixed point.  Others operations, like division and
2009non-integer multiplication, will change the number of decimal places and need to
2010be 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
2025In developing fixed-point applications, it is convenient to define functions
2026to 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
2038Q. 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
2040various precisions. Is there a way to transform them to a single recognizable
2041canonical value?
2042
2043A. The :meth:`normalize` method maps all equivalent values to a single
2044representative:
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
2050Q. Some decimal values always print with exponential notation.  Is there a way
2051to get a non-exponential representation?
2052
2053A. For some values, exponential notation is the only way to express the number
2054of significant places in the coefficient.  For example, expressing
2055:const:`5.0E+3` as :const:`5000` keeps the value constant but cannot show the
2056original's two-place significance.
2057
2058If an application does not care about tracking significance, it is easy to
2059remove the exponent and trailing zeroes, losing significance, but keeping the
2060value 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
2068Q. Is there a way to convert a regular float to a :class:`Decimal`?
2069
2070A. Yes, any binary floating point number can be exactly expressed as a
2071Decimal though an exact conversion may take more precision than intuition would
2072suggest:
2073
2074.. doctest::
2075
2076    >>> Decimal(math.pi)
2077    Decimal('3.141592653589793115997963468544185161590576171875')
2078
2079Q. Within a complex calculation, how can I make sure that I haven't gotten a
2080spurious result because of insufficient precision or rounding anomalies.
2081
2082A. The decimal module makes it easy to test results.  A best practice is to
2083re-run calculations using greater precision and with various rounding modes.
2084Widely differing results indicate insufficient precision, rounding mode issues,
2085ill-conditioned inputs, or a numerically unstable algorithm.
2086
2087Q. I noticed that context precision is applied to the results of operations but
2088not to the inputs.  Is there anything to watch out for when mixing values of
2089different precisions?
2090
2091A. Yes.  The principle is that all values are considered to be exact and so is
2092the arithmetic on those values.  Only the results are rounded.  The advantage
2093for inputs is that "what you type is what you get".  A disadvantage is that the
2094results 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
2104The solution is either to increase precision or to force rounding of inputs
2105using 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
2113Alternatively, 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
2119Q. Is the CPython implementation fast for large numbers?
2120
2121A. Yes.  In the CPython and PyPy3 implementations, the C/CFFI versions of
2122the decimal module integrate the high speed `libmpdec
2123<https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html>`_ library for
2124arbitrary precision correctly-rounded decimal floating point arithmetic.
2125``libmpdec`` uses `Karatsuba multiplication
2126<https://en.wikipedia.org/wiki/Karatsuba_algorithm>`_
2127for medium-sized numbers and the `Number Theoretic Transform
2128<https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform>`_
2129for very large numbers.  However, to realize this performance gain, the
2130context 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