mirror of
https://github.com/python/cpython.git
synced 2025-10-17 20:28:43 +00:00
![]() 1) Rename _mpd_qbarrett_divmod into _mpd_base_ndivmod: The function is only marginally related to either Barrett's algorithm or to the version in Hasselstrom's paper. 2) In places where the proof assumes exact operations, use new versions of add/sub/multiply that set NaN/Invalid_operation if this condition is not met. According to the proof this cannot happen, so this should be regarded as an extra safety net. 3) Raise Division_impossible for operands with a number of digits greater than MPD_MAX_PREC. This facilitates the audit of the function and can practically only occur in the 32-bit version under conditions where a MemoryError is already imminent. 4) Use _mpd_qmul() in places where the result can exceed MPD_MAX_PREC in a well defined manner. 5) Test for mpd_isspecial(qq) in a place where the addition of one can theoretically trigger a Malloc_error. 6) Remove redundant code in _mpd_qdivmod(). 7) Add many comments. |
||
---|---|---|
.. | ||
libmpdec | ||
tests | ||
_decimal.c | ||
docstrings.h | ||
ISSUES.txt | ||
README.txt |
About ===== _decimal.c is a wrapper for the libmpdec library. libmpdec is a fast C library for correctly-rounded arbitrary precision decimal floating point arithmetic. It is a complete implementation of Mike Cowlishaw/IBM's General Decimal Arithmetic Specification. Build process for the module ============================ As usual, the build process for _decimal.so is driven by setup.py in the top level directory. setup.py autodetects the following build configurations: 1) x64 - 64-bit Python, x86_64 processor (AMD, Intel) 2) uint128 - 64-bit Python, compiler provides __uint128_t (gcc) 3) ansi64 - 64-bit Python, ANSI C 4) ppro - 32-bit Python, x86 CPU, PentiumPro or later 5) ansi32 - 32-bit Python, ANSI C 6) ansi-legacy - 32-bit Python, compiler without uint64_t 7) universal - Mac OS only (multi-arch) It is possible to override autodetection by exporting: PYTHON_DECIMAL_WITH_MACHINE=value, where value is one of the above options. NOTE ==== decimal.so is not built from a static libmpdec.a since doing so led to failures on AIX (user report) and Windows (mixing static and dynamic CRTs causes locale problems and more).