Nous avons mis à jour la GNU Free Documentation License utilisée par le manuel de GNU MPFR de la version 1.2 à la version 1.3, qui a été publiée en 2008 (pour la branche master et la branche 4.2). En pratique, cela ne change rien pour les utilisateurs de MPFR. Détails supplémentaires.
Mon papier court An Emacs-Cairo scrolling bug due to floating-point inaccuracy sur un bug de défilement (scrolling) dans Emacs-Cairo à cause d'inexactitude en virgule flottante, que je vais présenter à la conférence ARITH-2024 (31st IEEE Symposium on Computer Arithmetic) à Málaga, est disponible sur mon site web et sur HAL. Résumé en anglais:
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).
J'ai aussi mis une petite vidéo sur mon site web, montrant l'effet de ce bug. Ce que j'ai fait pour cette vidéo, c'est d'aller à la fin du fichier, puis uniquement du scrolling arrière avec la molette de la souris. Il est difficile de voir ce qui se passe, mais c'est justement à cause de ce bug.
La bibliothèque GNU MPFR 4.2.1 (fondue savoyarde, patch level 1) est sortie (annonce).
Les patches 10 à 12 de GNU MPFR 4.2.0 sont disponibles dans la section bugs de la page de MPFR 4.2.0 depuis le 17 juillet. Le plus important est le patch 11, qui corrige un bug dans la fonction mpfr_inp_str
.
Les patches 5 à 9 de GNU MPFR 4.2.0 sont disponibles dans la section bugs de la page de MPFR 4.2.0. J'ai mis 3 patches (5 à 7) en fin de semaine dernière et je viens de mettre 2 nouveaux patches (8 et 9). Ces 2 derniers patches corrigent les bugs suivants:
8. La fonction mpfr_compound_si
peut prendre une énorme quantité de mémoire et beaucoup de temps dans certains cas (quand l'argument x est un grand entier pair et xn se représente exactement dans la précision cible) et ne détecte pas correctement les overflows et les underflows.
9. MPFR peut planter quand une fonction de sortie formatée est appelée avec %.2147483648Rg dans la chaîne de format. Par exemple: mpfr_snprintf (NULL, 0, "%.2147483648Rg\n", x);
Les patches 1 à 4 de GNU MPFR 4.2.0 sont disponibles dans la section bugs de la page de MPFR 4.2.0. Les premier et troisième patches corrigent des tests de MPFR et ne concernent pas la bibliothèque elle-même. Le deuxième patch (commit associé) corrige une boucle infinie dans la fonction mpfr_ui_pow_ui
en cas d'overflow; la fonction mpfr_log10
, qui utilise mpfr_ui_pow_ui
, est affectée par ce bug. Le quatrième patch (commit associé) corrige la fonction mpfr_rec_sqrt
dans certains cas très difficiles à arrondir (en pratique, la précision de l'entrée est nécessairement beaucoup plus grande que celle de la destination): de tels cas peuvent provoquer un débordement de pile à cause de nombreuses petites allocations dans la pile; une conséquence de cette correction est que cette fonction devrait maintenant être beaucoup plus rapide dans ces cas particuliers.
La bibliothèque GNU MPFR 4.2.0 (fondue savoyarde) est sortie (annonce).
Nouvelles fonctions:
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
est en fait une macro définie comme un alias de mpfr_pow_sj
).
La bibliothèque GNU MPFR 4.1.1 (épinards à la crème, patch level 1) est sortie: des bugs corrigés et des améliorations dans le formatage du manuel.
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
dans la version de développement de GNU MPFRJe viens d'implémenter la fonction mpfr_rootn_si
dans la version de développement de GNU MPFR. Elle fournit la fonction rootn de la norme IEEE 754 (qui est apparue dans la révision de 2008). Elle complète la fonction mpfr_rootn_ui
, qui fournissait rootn seulement pour les valeurs positives de n.
Comme annoncé le mois dernier dans sa liste de diffusion, les sources de GNU MPFR sont hébergées à https://gitlab.inria.fr/mpfr (Inria GitLab) depuis le 2021-10-15, suite à la fermeture d'InriaForge. Il y a maintenant deux dépôts Git séparés:
https://gitlab.inria.fr/mpfr/mpfr pour les sources de MPFR (informations sur le site web de GNU MPFR);
https://gitlab.inria.fr/mpfr/misc pour divers fichiers, comme ceux pour le site web de MPFR et des outils supplémentaires (en particulier, non liés à une version de MPFR).
Tout le travail lié à cette migration n'a pas encore été terminé.
Sur InriaForge, nous utilisions Subversion comme système de gestion de versions, si bien que le dépôt unique, composé des sources (trunk/branches/tags) et d'un répertoire spécial misc a dû être converti en deux dépôts Git. J'avais d'abord fait un essai avec git svn, mais une analyse du dépôt Git obtenu pour les sources a révélé des problèmes importants, causés principalement par les particularités suivantes du dépôt Subversion.
Certains fichiers et répertoires (pour les répertoires, c'étaient des branches) étaient (volontairement) remplacés, i.e. supprimés, puis rajoutés avec un historique différent (éventuellement nouveau), dans le même commit ou dans un commit ultérieur. L'outil git svn considérait que c'étaient les mêmes fichiers ou branches, et générait donc un historique complètement incorrect (par conséquent, le diff
dérivé du commit généré était aussi complètement incorrect, même si le contenu obtenu était correct).
Avant Subversion, CVS était utilisé comme système de gestion de versions, et le dépôt CVS a été converti à Subversion avec cvs2svn le 2005-10-24. Malheureusement, cvs2svn avait des bugs (ou était-ce CVS lui-même?), et a généré un historique incorrect pour les tags (nous ne nous étions pas aperçu de ce problème à ce moment, mais il n'est de toute façon pas clair que nous aurions pu faire quelque chose pour l'éviter), en particulier avec certains fichiers provenant de la branche associée et d'autres provenant du tronc.
J'ai donc décidé d'utiliser l'excellent outil reposurgeon d'Eric S. Raymond pour tout corriger, mais aussi ajouter des méta-données, comme les révisions Subversion à chaque message de commit (puisque de telles révisions sont parfois référencées), ainsi que la branche affectée (car Git ne permet pas de récupérer cette information). Pour cette conversion de dépôt avec reposurgeon, j'ai trouvé divers problèmes (certains également dûs aux particularités du dépôt Subversion de MPFR, et tous corrigés assez rapidement) et fait quelques merge requests. Certains fichiers et scripts se trouvent dans l'archive mpfr-conversion.tar.xz. Noter qu'il n'y avait qu'une seule opération entre ce qui est maintenant deux dépôts: la révision 12528 de Subversion, où un fichier était déplacé de /misc vers /trunk/tools; j'ai vérifié qu'elle a correctement été traitée par reposurgeon (mais évidemment, dans les dépôts Git, cela apparaît juste comme une addition d'un côté et comme une suppression de l'autre, sans lien entre ces deux opérations ainsi générées).
Le patch 12 de GNU MPFR 4.1.0 est disponible dans la section bugs de la page de MPFR 4.1.0. Il corrige quelques problèmes avec la fonction mpfr_get_str_ndigits
.
Les patches 10 et 11 de GNU MPFR 4.1.0 sont disponibles dans la section bugs de la page de MPFR 4.1.0. Le bug principal, corrigé par le patch 10 (parmi de possibles échecs de compilation dans des cas inhabituels): la macro mpfr_set
(qui, par défaut, est utilisée à la place de la fonction) évalue son deuxième argument deux fois.
À cause d'une coupure de l'alimentation électrique, le serveur hébergeant mpfr.org sera éteint du mardi 23 février 2021 à 17:00 CET (16:00 UTC) au mercredi 24 février 2021 à 18:00 CET (17:00 UTC), sauf imprévu. Seul le site web mpfr.org sera affecté. La liste de diffusion de MPFR et InriaForge continueront de fonctionner.
Les patches 8 et 9 de GNU MPFR 4.1.0 sont disponibles dans la section bugs de la page de MPFR 4.1.0.