We have just updated the GNU Free Documentation License used by the GNU MPFR manual from version 1.2 to version 1.3, which was published in 2008 (for both the master branch and the 4.2 branch). In practice, this does not change anything for MPFR users. Additional details.
My short paper An Emacs-Cairo scrolling bug due to floating-point inaccuracy, which I'll present at the ARITH-2024 conference (31st IEEE Symposium on Computer Arithmetic) in Málaga, is available on my website and on HAL. Abstract:
We study a bug that we found in the GNU Emacs text editor when built against the Cairo graphics library. We analyze both the Emacs code and the Cairo code, and we suggest what can be done to avoid unexpected results. This involves a particular case with a computation that can be reduced to the equivalent floating-point expression ((1/s)·b)·s, where s and b are small positive integers such that b < s and the basic operations are rounded to nearest. The analysis takes into account the values of s and b that can occur in practice, and the suggestions for workarounds must avoid handling this particular case in a separate branch or breaking the structure of the Cairo library (so that just returning b is not possible).
I've also put a small video on my website, showing the effect of this bug. What I did for this video is to go to the end of the file, then only backward scrolling with the mouse wheel. It's difficult to see what's going on, but this is precisely because of this bug.
The GNU MPFR 4.2.1 library (fondue savoyarde, patch level 1) has been released (announce).
Patches 10 to 12 of GNU MPFR 4.2.0 have been available in the bugs section of the MPFR 4.2.0 page since July 17. The most important one is patch 11, which fixes a bug in the mpfr_inp_str
function.
Patches 5 to 9 of GNU MPFR 4.2.0 are available in the bugs section of the MPFR 4.2.0 page. I put 3 patches (5 to 7) at the end of last week and I've just put 2 new patches (8 and 9). These last 2 patches fix the following bugs:
8. The mpfr_compound_si
function can take a huge amount of memory and time in some cases (when the argument x is a large even integer and xn is represented exactly in the target precision) and does not correctly detect overflows and underflows.
9. MPFR can crash when a formatted output function is called with %.2147483648Rg in the format string. For instance: mpfr_snprintf (NULL, 0, "%.2147483648Rg\n", x);
Patches 1 to 4 of GNU MPFR 4.2.0 are available in the bugs section of the MPFR 4.2.0 page. The first and third patches fix tests of MPFR and do not concern the library itself. The second patch (associated commit) fixes an infinite loop in the mpfr_ui_pow_ui
function in case of overflow; the mpfr_log10
function, which uses mpfr_ui_pow_ui
, is affected by this bug. The fourth patch (associated commit) fixes the mpfr_rec_sqrt
function in some cases that are very hard to round (in practice, the precision of the input needs to be much larger than the one of the destination): such cases may yield a stack overflow due to many small allocations in the stack; a consequence of this fix is that this function should now be much faster in these particular cases.
The GNU MPFR 4.2.0 library (fondue savoyarde) has been released (announce).
New functions:
mpfr_cosu
, mpfr_sinu
, mpfr_tanu
, mpfr_acosu
, mpfr_asinu
, mpfr_atanu
, mpfr_atan2u
;
mpfr_cospi
, mpfr_sinpi
, mpfr_tanpi
, mpfr_acospi
, mpfr_asinpi
, mpfr_atanpi
, mpfr_atan2pi
;
mpfr_log2p1
, mpfr_log10p1
, mpfr_exp2m1
, mpfr_exp10m1
, mpfr_compound_si
, mpfr_fmod_ui
, mpfr_powr
, mpfr_pown
, mpfr_pow_uj
, mpfr_pow_sj
, mpfr_rootn_si
(mpfr_pown
is actually a macro defined as an alias for mpfr_pow_sj
).
The GNU MPFR 4.1.1 library (épinards à la crème, patch level 1) has been released: bug fixes and improved manual formatting.
The GNU MPFR 4.1.1 release candidate is available. The main changes are bug fixes (in particular for macros implementing functions) and improved manual formatting, by using a recent texinfo.tex file (2022-09-14.01).
mpfr_rootn_si
in the Development Version of GNU MPFRI have just implemented the mpfr_rootn_si
function in the development version of GNU MPFR. It provides the rootn function of the IEEE 754 standard (which appeared in the 2008 revision). It completes the mpfr_rootn_ui
function, which was providing rootn for non-negative values of n only.
As announced last month in its mailing-list, the GNU MPFR sources have been hosted at https://gitlab.inria.fr/mpfr (Inria GitLab) since 2021-10-15, after InriaForge closed. There are now two separate Git repositories:
https://gitlab.inria.fr/mpfr/mpfr for the MPFR sources (some information on the GNU MPFR website);
https://gitlab.inria.fr/mpfr/misc for miscellaneous files, such as those for the MPFR website and additional tools (in particular, not tied to an MPFR version).
Not all the work related to this migration has been completed yet.
On InriaForge, we were using Subversion as the version control system, so that the single repository, composed of the sources (trunk/branches/tags) and some special misc directory, had to be converted to two Git repositories. I had first done an attempt with git svn, but an analysis of the obtained Git repository for the sources revealed important issues, caused mainly by the following particularities of the Subversion repository.
Some files and directories (for the directories, these were branches) were replaced (on purpose), i.e. deleted, then re-added with a different history (possibly new), either in the same commit or later. The git svn tool was considering that these were the same files or branches, thus was generating a completely incorrect history (as a consequence, the diff
implied by the generated commit was also completely incorrect, even though the resulting contents were correct).
Before Subversion, CVS was used as the version control system, and the CVS repository was converted to Subversion with cvs2svn on 2005-10-24. Unfortunately, cvs2svn had bugs (or was it CVS itself?), and generated an incorrect history for tags (we did not notice this issue at that time, but anyway, it is not clear that we could have done anything to avoid it), in particular with some files coming from the associated branch and others coming from the trunk.
So I decided to use Eric S. Raymond's excellent reposurgeon tool to fix everything, but also to add some metadata, such as the Subversion revisions to each commit message (since such revisions are sometimes referenced), together with the affected branch (since Git cannot retrieve this information). For this repository conversion with reposurgeon, I found various issues (some of them also due to the particularities of the MPFR's Subversion repository, and all of them fixed rather quickly) and did some merge requests. Some files and scripts I wrote for this conversion can be found in the mpfr-conversion.tar.xz archive. Note that there was only one operation between what are now two repositories: Subversion revision 12528, where a file was moved from /misc to /trunk/tools; I checked that it was correctly handled by reposurgeon (but of course, in the Git repositories, this just appears as an addition on one side and as a deletion on the other side, without any link between these two generated operations).
Patch 12 of GNU MPFR 4.1.0 is available in the bugs section of the MPFR 4.1.0 page. It fixes some issues with the mpfr_get_str_ndigits
function.
Patches 10 and 11 of GNU MPFR 4.1.0 are available in the bugs section of the MPFR 4.1.0 page. The main bug, fixed by patch 10 (among potential compilation failures in unusual cases): the mpfr_set
macro (which, by default, is used in place of the function) evaluates its second argument twice.
Due to power outage, the server hosting mpfr.org will be switched off from Tuesday 23 February 2021, 17:00 CET (16:00 UTC) to Wednesday 24 February 2021, 18:00 CET (17:00 UTC), except unpredictable incident. Only the mpfr.org website will be affected. The MPFR mailing-list and InriaForge will still work.
Patches 8 and 9 of GNU MPFR 4.1.0 are available in the bugs section of the MPFR 4.1.0 page.