GNU MPFR version 3.1.6 (released on 7 September 2017)

[download] [documentation] [bugs] [changes] [platforms] [timings of 3.1.2]

The canard à l'orange release, patch level 6.

MPFR 3.1.6 requires GMP 4.1.0 or higher (GMP 4.2.3 or higher is recommended).

Warning! Due to the fact that TLS support is now detected automatically, the MPFR build can be incorrect on some platforms (compiler or system bug). Indeed, the TLS implementation of some compilers/platforms is buggy, and MPFR cannot detect every problem at configure time. Please run make check to see if your build is affected. If you get failures, you should try the --disable-thread-safe configure option to disable TLS and see if this solves these failures. But you should not use an MPFR library with TLS disabled in a multithreaded program (unless you know what you are doing).


The MPFR 3.1.6 source can be downloaded in the following archive formats:

Each tarball is signed by Vincent Lefèvre. This can be verified using the DSA key ID 980C197698C3739D; this key can be retrieved with:

gpg --recv-keys 980C197698C3739D

or by downloading it from The key fingerprint is:

07F3 DBBE CC1A 3960 5078  094D 980C 1976 98C3 739D

The signatures can be verified with:

gpg --verify file.asc

You should check that the key fingerprint matches.

MPFR is also available via third-party packages and ports.



The bugs listed below have been fixed (latest update: 2017-12-15). The patches are distributed under the same license as this version of MPFR, that is, the GNU Lesser General Public License (GNU Lesser GPL), version 3 or later.

The following instructions are for Linux and may be similar for other operating systems. You can apply the patches in several ways:

With the first two ways, the PATCHES file is modified, so that one can know what patches have been applied, using the mpfr_get_patches function. Moreover a suffix is added to the version string, but note that for practical reasons, not all the files where the version appears are patched; thus one can also track applied patches with the MPFR_VERSION_STRING macro (header) and the mpfr_get_version function (library). However, if some patches are not applied or if patches are applied in a different order, then the patch command will fail to update some chunks, so that the suffix is not always reliable for patches.

Note: These patches are in unified diff format and some vendors' patch commands cannot deal with them; in this case, please use GNU patch (it may already be installed on your system, e.g. as /usr/local/bin/patch or gpatch).

Fixed bugs, with patches:

  1. Functions mpfr_get_ld, mpfr_get_si, mpfr_get_ui, mpfr_get_sj, mpfr_get_uj and mpfr_get_z can behave incorrectly in a very reduced exponent range. These bugs are fixed by the mpfr_get patch.
    Corresponding changeset in the 3.1 branch: 30630a4d (r11783).
  2. When the assertions have been enabled with the --enable-assert configure option, an assertion failure occurs in mpfr_root, which computes x1/k (the kth root of x), for |x| = 1 and k > 100. The reason is that when |x| = 1, the algorithm used for k >100 gets the exponent of zero, while zero does not have an exponent. When these assertions are disabled (default), one can prove that the generated code is actually correct in this specific case. This bug is fixed by the root patch, which also provides a test case.
    Corresponding changeset in the 3.1 branch: e3e61396 (r11982).

Other bugs: See the tracker and the BUGS file.

Changes from version 3.1.5 to version 3.1.6

Platforms Known to Support MPFR

MPFR 3.1.6 has been successfully compiled and checked on the following platforms:

Back to the MPFR page.