GNU MPFR version 2.4.1 (released on 25 February 2009)

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

The andouillette sauce moutarde release, patch level 1.

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

Warning! On Solaris, MPFR 2.4.1 can be miscompiled with GCC. This is in fact a bug in the Solaris memset function, which has been fixed by Sun in October 2009. For more information about this bug, see this bug report and this thread. See also information about the fix.

Note: the bug-fix release MPFR 2.4.2 is available. Please upgrade!


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

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



The bugs listed below have been fixed (latest update: 2009-03-13). 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 2.1 or later. Note that patches from the trunk (not listed on this page) are under the GNU Lesser GPL version 3 or later, thus may be backported only by the authors or the FSF without a license upgrade.

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 new 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:

  1. The remainder functions (mpfr_fmod, mpfr_remainder and mpfr_remquo) round the result before changing its sign when x is negative. The consequence is that in non-symmetric rounding modes (GMP_RNDD and GMP_RNDU), the result is rounded in the wrong direction. This bug is fixed in the remainder-neg patch.
  2. Assertion failure messages do not mention MPFR explicitly. This is fixed in the assert patch.
  3. In the tests: patch adding casts to void * for %p in printf format. Most (if not all) C implementations should not be affected by these missing casts.
  4. A type is incorrect in the vasprintf.c file. In practice, this can make MPFR crash when the M specifier (for the formatted output functions) is used and a limb does not have the same size as a pointer (e.g. when GMP has been built with ABI=mode32 on PowerPC G5). This bug is fixed in the vasprintf-mp_limb_t patch. Note: the tests from MPFR 2.4.1 already contain a testcase in the tests/tfprintf.c file.
  5. If a limb does not have the same size as an unsigned long, a shift count is incorrect in mpfr_zeta_ui. In such a case, the practical consequence is a possible performance loss. An incorrect result is theoretically possible (e.g. if the compiler optimizes out parts of code with undefined behavior), but unlikely in practice. This bug is fixed in the zeta_ui-shift patch.

Some other bugs have been found and fixed both in the trunk and in the 2.4 branch. The ones that may affect the user are listed below. The corresponding patches are not published (these bugs will be fixed in the upcoming 2.4.2 release), but the changeset numbers (in the 2.4 branch) are given for the reference.

Other bugs: please see the tracker and the __GMP_comma (due (ly frerresp/tfprintf.ces, yielding unronym>M)with argus://ed (The referplatformsscm/viees som

0ndoeon" href="../faf="mpfr.html" tSecurt us

N near 0.
__GMngeset>__GMlletely specorbiest s)e a __GM"httpbsto up C99 comalpha-OSF1-V5de>__GMthe SubversiMiscelcodematt). Thissamp> pprecision equal to 6.mpfr_const_pimpfr_const_log2Crash witd in thethe usep with
stamps gPrograms acodface">APIyielding un bucp> pprecision equal to>te0he PATCHES (callyi386-pc-s.<2.8="MPFR (callyi386-pc-s.<2.1g="MPFR does not work (callyi686-pc-d tux-gnum>MPFR dois not work o.11.0> yielout C 5.9g syst_i386 Pset: 124871-01f="h7/h7/ (callyi686-pc-s.<2.11="MPFR (callyia64-unhe nned tux-gnum>MPFRmiumro/cite> does not work o.3 or2,b3 3r0 (callymips64el-unhe nned tux-gnum>MPFR (cally supppc- come-darCha8.11.0m>MPFR does not work o.3 0.2, 32 (cally supppc-unhe nned tux-gnum>MPFR does not work o.3 (cally supppc64-unhe nned tux-gnum>MPFR does not work o.3 or2 (callyx86_64-pc-s.<2.11="MPFR (callyx86_64-unhe nned tux-gnum>MPFR doop (< not work o.3 oma with a compiis not work options, you may (Vi_GM Ultim&& sx644.119 snoptions, yVi_//gfStudio ="h8 (32 in bug do avoids this pause of evrepos/trict-rh="100 " alt=lang="en"> I"httlv Thd-.w3.or0" "/acroV ThdR/xhtml1/D!>