Version française

CariBlog – Blog on Vincent Lefèvre's Research Pages and Computer Arithmetic

All blog items.


[2024-05-06 21:29:49 UTC]
My Paper on an Emacs-Cairo Scrolling Bug due to Floating-Point Inaccuracy

(CariBlog – Software)

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/sbs, 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.

[2023-08-23 00:15:08 UTC]
GNU MPFR 4.2.1 is Released

(CariBlog – MPFR – Software)

The GNU MPFR 4.2.1 library (fondue savoyarde, patch level 1) has been released (announce).

[2023-07-24 00:36:17 UTC]
Patches 10 to 12 for GNU MPFR 4.2.0

(CariBlog – MPFR – Software)

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.

[2023-05-17 21:53:08 UTC]
Patches 5 to 9 for GNU MPFR 4.2.0

(CariBlog – MPFR – Software)

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);

[2023-04-17 23:57:46 UTC]
Patches 1 to 4 for GNU MPFR 4.2.0

(CariBlog – MPFR – Software)

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.

[2023-01-06 17:01:51 UTC]
GNU MPFR 4.2.0 is Released

(CariBlog – MPFR – Software)

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).

[2022-11-17 22:46:02 UTC]
GNU MPFR 4.1.1 is Released

(CariBlog – MPFR – Software)

The GNU MPFR 4.1.1 library (épinards à la crème, patch level 1) has been released: bug fixes and improved manual formatting.

[2022-10-07 16:23:35 UTC]
GNU MPFR 4.1.1 Release Candidate

(CariBlog – MPFR – Software)

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).

[2022-04-05 23:32:32 UTC]
New Function mpfr_rootn_si in the Development Version of GNU MPFR

(CariBlog – MPFR – Software)

I 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.

[2021-11-19 22:59:17 UTC]
GNU MPFR and Migration to Inria GitLab

(CariBlog – MPFR – Software)

As announced last month in its mailing-list, the GNU MPFR sources have been hosted at (Inria GitLab) since 2021-10-15, after InriaForge closed. There are now two separate Git repositories:

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).

[2021-04-23 17:06:28 UTC]
Patch 12 for GNU MPFR 4.1.0

(CariBlog – MPFR – Software)

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.

[2021-03-09 18:59:08 UTC]
Patches 10 and 11 for GNU MPFR 4.1.0

(CariBlog – MPFR – Software)

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.

[2021-02-19 12:55:57 UTC]
Scheduled Outage Concerning

(CariBlog – MPFR)

Due to power outage, the server hosting 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 website will be affected. The MPFR mailing-list and InriaForge will still work.

[2021-02-17 21:28:21 UTC]
Patches 8 and 9 for GNU MPFR 4.1.0

(CariBlog – MPFR – Software)

Patches 8 and 9 of GNU MPFR 4.1.0 are available in the bugs section of the MPFR 4.1.0 page.

[2021-02-11 22:34:12 UTC]
7 Patches for GNU MPFR 4.1.0

(CariBlog – MPFR – Software)

Patches 1 to 7 of GNU MPFR 4.1.0 are available in the bugs section of the MPFR 4.1.0 page.