bpo-26256: Document algorithm speed for the Decimal module. (GH-4808) (#11736)
(cherry picked from commit 00e9c55d27
)
Co-authored-by: Cheryl Sabella <cheryl.sabella@gmail.com>
This commit is contained in:
parent
533a9b459b
commit
a2f4c40233
|
@ -2115,3 +2115,23 @@ Alternatively, inputs can be rounded upon creation using the
|
|||
|
||||
>>> Context(prec=5, rounding=ROUND_DOWN).create_decimal('1.2345678')
|
||||
Decimal('1.2345')
|
||||
|
||||
Q. Is the CPython implementation fast for large numbers?
|
||||
|
||||
A. Yes. In the CPython and PyPy3 implementations, the C/CFFI versions of
|
||||
the decimal module integrate the high speed `libmpdec
|
||||
<https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html>`_ library for
|
||||
arbitrary precision correctly-rounded decimal floating point arithmetic.
|
||||
``libmpdec`` uses `Karatsuba multiplication
|
||||
<https://en.wikipedia.org/wiki/Karatsuba_algorithm>`_
|
||||
for medium-sized numbers and the `Number Theoretic Transform
|
||||
<https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform>`_
|
||||
for very large numbers. However, to realize this performance gain, the
|
||||
context needs to be set for unrounded calculations.
|
||||
|
||||
>>> c = getcontext()
|
||||
>>> c.prec = MAX_PREC
|
||||
>>> c.Emax = MAX_EMAX
|
||||
>>> c.Emin = MIN_EMIN
|
||||
|
||||
.. versionadded:: 3.3
|
Loading…
Reference in New Issue