Table Of Contents


Version 2.4.2

build fixes

  1. ICC/Windows: the optimized x86 build requires -fp-model=precise.
  2. OS X: the linker requires -dynamiclib and -install_name for building a shared library.

Version 2.4.1

build fixes

  1. The __uint128_t detection in ./configure has been fixed . Failure to detect the option resulted in building the significantly slower ANSI target on non-x86/amd64 platforms.
  2. Use -fPIC instead of -fpic to fix a build failure on SPARC platforms.
  3. Split the tests into a faster “make check” and a slower “make check_alloc”. The latter tests allocation failures but is too slow on older machines.
  4. Generate detailed test output for better feedback on slower machines.
  5. The static library is now built without -fPIC, which is significantly faster at least on x86. Both the static and the shared library are now tested separately.

bug fixes

  1. PEP 3101 formatting: With the ‘%’ format type, a trailing percent sign is now also added for infinities and NaNs.

Version 2.4.0


  1. Faster integer to string conversion.
  2. mpd_qln(), mpd_qlog10() and mpd_pow() are now thread-safe.
  3. All functions that take or return C integers are now available in both the 64-bit and the 32-bit builds.
  4. Support for cross-compiling.
  5. Scripts for Visual Studio builds.

code improvements

  1. This version is exactly the same as the version shipped with Python-3.3+. Large portions of the code have been refactored in order to facilitate proofs. Many ACL2 proofs have been added.


  1. The Python module has been removed from mpdecimal, since both libmpdec and cdecimal are included in Python-3.3+.
  2. The large test suite against decNumber as well as the multi-precision tests against gmp have been removed, but will be available in a separate package. Naturally these tests are still run as part of the release process.

Version 2.3


  1. New test suite with comprehensive tests against decNumber.
  2. Full support for compilers without uint64_t (tested with CompCert).

bug fixes

  1. If ROUND_FLOOR is set and the operand is zero, the functions mpd_plus() and mpd_minus() have special cases for the sign of the result.

Version 2.2

build process

  1. configure: append CFLAGS to CONFIG flags.
  2. Makefile: use includedir, libdir, datarootdir, datadir, docdir, DESTDIR.

workarounds for toolchain bugs

  1. Enable workaround for a gcc miscompilation. See:

  2. Enable workaround for the glibc _FORTIFY_SOURCE/memmove bug, which is exposed by gcc-4.6. See:


  1. Make PPRO inline assembly PIC-compliant (for the dynamic library).

Version 2.1

Version 2.1 was never released, but escaped into the wild via the Makefile and in cdecimal-1.97-rc2.tar.gz. Both files already had that version number.


  1. Code coverage increased to 100%. This includes every possible allocation failure.
  2. Switch build process to ./configure.
  3. Makefile targets for creating coverage reports.

bug fixes

  1. mpd_qget_uint, mpd_qget_u64, mpd_qget_u32 did not raise for negative input.
  2. Handle allocation failures in _mpd_fntmul under extreme conditions.

Version 1.2.1

bug fixes

  1. With MACHINE=ansi64, the macros BSR and BSF used x86 assembly. This caused compilation to fail on non-x64 platforms.

Version 1.2


  1. Support for compilers with __uint128_t (option MACHINE=ansi64).
  2. Support for other 64-bit compilers (option MACHINE=ansi64c32).
  3. Support for legacy compilers without uint64_t (option MACHINE=ansi-legacy).
  4. Slightly different build process (please read INSTALL.txt).
  5. If clamp=1, the maximum payload length of a NaN is prec-1.

bug fixes

  1. Fix for mpd_qround_to_int, which did not handle digits exceeding the context precision correctly in all cases.
  2. In rare corner cases Underflow was not set in transcendental functions.