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.
Les patches 1 à 7 de GNU MPFR 4.1.0 sont disponibles dans la section bugs de la page de MPFR 4.1.0.
Bonne année à tous!
À cause d'une coupure de l'alimentation électrique, le serveur hébergeant mpfr.org sera éteint du vendredi 22 janvier 2021 à 16:00 CET (15:00 UTC) au lundi 25 janvier 2021 à 10:00 CET (09:00 UTC), sauf imprévu. Seul le site web mpfr.org sera affecté. La liste de diffusion de MPFR et InriaForge continueront de fonctionner.
The GNU MPFR 4.1.0 release candidate is available.
Note that the default CFLAGS
value for GCC uses an option that has been introduced in GCC 4.1 (released in 2006). So, if you want to build MPFR with a GCC version less than 4.1, you need to provide an explicit CFLAGS
. This issue will be fixed in the final release.
Les patches 2 à 6 de GNU MPFR 4.0.2 sont disponibles dans la section bugs de la page de MPFR 4.0.2. Les principaux corrigent des problèmes d'underflow/overflow pouvant être visibles avec les fonctions suivantes: mpfr_set_ui_2exp
, mpfr_set_si_2exp
, mpfr_set_uj_2exp
, mpfr_set_sj_2exp
, mpfr_fmma
, mpfr_fmms
, mpfr_fma
, mpfr_fms
.
Le serveur mpfr.org est actuellement hors-service (tout comme d'autres serveurs virtualisés, hébergés au même endroit). Ceci est dû à des problèmes imprévus suite à une maintenance concernant le NAS faite hier (2020-02-11 à 17:00 UTC). Nous ne savons toujours pas quand le serveur sera de nouveau en ligne.
Vous pouvez toujours obtenir le code source de GNU MPFR via le site FTP GNU et via InriaForge.
[Mise à jour] Le serveur est de nouveau en ligne.
J'ai écrit une nouvelle page web sur Neopolis, jeu créé par Ben Kaltenbaek, Roland Lamidieu et Lucas Odion, et lancé à Lyon en mars 2019 sous le nom Metropolis, avant d'être renommé en Neopolis en juillet.
J'y donne des informations en tant que joueur aux 5 parties qui ont eu lieu à Lyon, dont celle en cours depuis le début du mois.
J'y ai aussi ajouté une section sur un bug d'affichage, pour lequel j'ai trouvé une explication probable, liée à une mauvaise méthode de calcul en virgule flottante (les valeurs particulières affectées par ce bug correspondent à mon explication).
J'ai un nouveau papier, écrit avec Jean-Michel Muller: Accurate Complex Multiplication in Floating-Point Arithmetic. Il a été accepté au 26e IEEE Symposium on Computer Arithmetic (ARITH 26), qui se tiendra du 10 au 12 juin 2019 à Kyoto au Japon. Résumé (en anglais):
We deal with accurate complex multiplication in binary floating-point arithmetic, with an emphasis on the case where one of the operands in a double-word
number. We provide an algorithm that returns a complex product with normwise relative error bound close to the best possible one, i.e., the rounding unit u.
Pour les tests, des comparaisons ont été faites avec l'algorithme naïf dans les formats binary64 (double précision) et binary128 (quadruple précision), et avec des implémentations basées sur GNU MPFR, sur des machines avec processeurs x86_64 et POWER9 (ce dernier est actuellement le seul processeur avec un support binary128 en matériel).
La bibliothèque GNU MPFR 4.0.2 (dinde aux marrons, patch level 2) est sortie. En plus de la correction de bugs, cette version corrige la description de mpfr_get_str
dans le manuel pour suivre le comportement historique et celui de la fonction mpf_get_str
de GMP.
The GNU MPFR 4.0.2 release candidate is available.
Le patch 14 de GNU MPFR 4.0.1 est disponible dans la section bugs de la page de MPFR 4.0.1. Il corrige un bug affectant les fonctions mpfr_fmma
et mpfr_fmms
dans des cas particuliers: dans le mode d'arrondi au plus près (MPFR_RNDN
), ces fonctions peuvent arrondir dans la mauvaise direction à cause d'un double arrondi dans le calcul.
Les patches 12 et 13 de GNU MPFR 4.0.1 sont disponibles dans la section bugs de la page de MPFR 4.0.1. Ils corrigent des bugs dans les fonctions de sortie formatée (mpfr_*printf
):
Patch 12: Possible comportement indéfini en cas d'erreur: écriture via un pointeur nul, libération d'un mauvais pointeur, et comportement indéfini lié à <stdarg.h>.
Patch 13: Les drapeaux pour le modificateur de longueur P (argument de type mpfr_prec_t) sont ignorés; ceci inclut le signe de la taille (field width) quand la valeur est fournie en argument (en utilisant l'astérisque * dans la chaîne de format).
Les patches 10 et 11 de GNU MPFR 4.0.1 sont disponibles dans la section bugs de la page de MPFR 4.0.1.
Le problème principal est que les fonctions mpfr_erf
et mpfr_erfc
peuvent provoquer un échec d'assertion, car la borne d'erreur est calculée avec le type double et la valeur peut être trop grande pour être représentable (overflow). C'est corrigé par le patch 11.
Les patches 7 à 9 de GNU MPFR 4.0.1 sont disponibles dans la section bugs de la page de MPFR 4.0.1.
Le problème principal se produit avec les fonctions de sortie formatée (mpfr_*printf
) quand le drapeau ' est utilisé dans une locale où le séparateur des milliers n'est pas vide. Dans certains cas spécifiques (c'est-à-dire, quand la partie entière est arrondie vers le haut à 10 ou 100), la chaîne générée peut être incorrecte et puisqu'elle est plus petite que la chaîne attendue, une taille de tampon incorrecte peut être fournie à la fonction de libération de mémoire de l'allocateur courant de GMP. Par défaut, cette taille est ignorée, mais elle peut avoir une importance si les allocateurs ont été changés avec la fonction mp_set_memory_functions
de GMP, auquel cas une conséquence possible est une corruption de la mémoire.
Les patches 1 à 6 de GNU MPFR 4.0.1 sont disponibles dans la section bugs de la page de MPFR 4.0.1. Le premier corrige un bug majeur introduit dans MPFR 4.0.0 (dans un cas particulier de l'addition/soustraction), quoique la plupart des applications ne sont probablement pas affectées. Les autres corrigent des bugs mineurs, probablement sans conséquences en pratique.
Pour les utilisateurs du module Perl Math::MPFR, noter que le patch 6 fait apparaître un bug dans la version 4.03 de ce module (version actuelle au moment d'écrire ces lignes – [Mise à jour du 2018-05-08] Une nouvelle version du module est maintenant disponible).
La bibliothèque GNU MPFR 4.0.1 (dinde aux marrons, patch level 1) est sortie. Elle corrige quelques problèmes de la version 4.0.0, pour laquelle je n'avais pas fait d'annonce ici: en particulier, un bug dans la fonction mpfr_div_ui
, qui était présent depuis l'introduction de mpfr_div_ui
au tout début du développement de MPFR en 1999. Mais à partir de la version 4.0.0, ce bug affectait aussi la fonction mpfr_div
.
Ces versions 4.0.* contiennent de très nombreux changements par rapport aux versions 3.1.* (GNU MPFR 3.1.0 était sortie en octobre 2011).
The GNU MPFR 4.0.0 release candidate is available.
By the way, I did my first MPFR commit 17 years ago.
Le patch 1 de GNU MPFR 3.1.6 est disponible dans la section bugs de la page de MPFR 3.1.6. Il corrige les fonctions de conversion mpfr_get_ld
, mpfr_get_si
, mpfr_get_ui
, mpfr_get_sj
, mpfr_get_uj
et mpfr_get_z
lorsqu'elles sont appelées avec une plage d'exposants très réduite.
La bibliothèque GNU MPFR 3.1.6 (canard à l'orange, patch level 6) est sortie. Les changements par rapport à la version 3.1.5:
Amélioration du manuel de MPFR.
Corrections de bugs (liste détaillée sur la page de MPFR 3.1.5 et dans le fichier ChangeLog).
Autotools: Sous Linux, on s'assure que les anciens dtags (lorsqu'ils sont supportés) sont utilisés si la variable d'environnement LD_LIBRARY_PATH est définie; sinon make check
vérifierait une bibliothèque MPFR compatible installée, trouvée dans LD_LIBRARY_PATH, au lieu de celle qui a été compilée avec make
.
The GNU MPFR 3.1.6 release candidate has been available for a few days.
Le patch 10 de GNU MPFR 3.1.5 est disponible dans la section bugs de la page de MPFR 3.1.5. Il corrige une inclusion incorrecte d'en-tête introduite par le patch 8, afin d'obtenir la définition correcte des symboles et éviter une erreur à l'édition de liens sous Microsoft Windows avec DLL.
Le patch 9 de GNU MPFR 3.1.5 est disponible dans la section bugs de la page de MPFR 3.1.5. Il corrige un bug très important pour les utilisateurs de plateformes avec un unsigned long sur 32 bits (ABI 32 bits ou Microsoft Windows) pour les très grandes précisions: les calculs dans sin_cos.c sont affectés par des dépassements de capacité dans ces précisions (plus de 1 000 000 bits environ) à cause de la taille limite du type unsigned long. En pratique, ceci introduit une erreur pouvant aller jusqu'à approximativement 2−1019574, si bien que les fonctions trigonométriques (mpfr_sin
, mpfr_cos
, mpfr_tan
) et les fonctions qui les appellent peuvent être très peu précises (limitant la précision globale à environ un million de bits pour ces fonctions sur de telles plateformes).
Les patches 3 à 8 de GNU MPFR 3.1.5 sont disponibles dans la section bugs de la page de MPFR 3.1.5. Les cinq premiers corrigent des problèmes mineurs et le patch 8 corrige certaines macros de mpf2mpfr.h (seuls les utilisateurs de ce fichier d'en-tête, utilisé pour compiler des programmes GMP/mpf avec MPFR au lieu de mpf, peuvent être affectés).
J'ai deux nouveaux papiers qui viennent d'être acceptés, tous les deux liés à GNU MPFR.
Correctly Rounded Arbitrary-Precision Floating-Point Summation, à paraître dans IEEE Transactions on Computers. DOI: 10.1109/TC.2017.2690632 (lien officiel). Fichier PDF sur mon site web personnel (librement téléchargeable, © IEEE). Résumé (en anglais):
We present a fast algorithm together with its low-level implementation of correctly rounded arbitrary-precision floating-point summation. The arithmetic is the one used by the GNU MPFR library: radix 2; no subnormals; each variable (each input and the output) has its own precision. We also give a worst-case complexity of this algorithm and describe how the implementation is tested.
Optimized Binary64 and Binary128 Arithmetic with GNU MPFR, écrit avec Paul Zimmermann. Accepté au 24e IEEE Symposium on Computer Arithmetic (ARITH 24), qui se tiendra du 24 au 26 juillet 2017 à Londres, Angleterre. Résumé (en anglais):
We describe algorithms used to optimize the GNU MPFR library when the operands fit into one or two words. On modern processors, a correctly rounded addition of two quadruple precision numbers is now performed in 22 cycles, a subtraction in 24 cycles, a multiplication in 32 cycles, a division in 64 cycles, and a square root in 69 cycles. We also introduce a new faithful rounding mode, which enables even faster computations. Those optimizations will be available in version 4 of MPFR.
For those who test the GNU MPFR trunk via Subversion on InriaForge:
The tzeta test should no longer fail on most platforms (IEEE 754 machines with default IEEE exception handling).
The tsprintf test still fails (fix in progress). The cause is a major efficiency issue in particular cases (huge precision requested).
Note: Both problems are also present in the released versions, but they have no tests that trigger them.
Le patch 2 de GNU MPFR 3.1.5 est disponible dans la section bugs de la page de MPFR 3.1.5. Il corrige le bug suivant. La fonction mpfr_strtofr
peut retourner une valeur ternaire incorrecte dans le mode d'arrondi au plus près (MPFR_RNDN
).
Le patch 1 de GNU MPFR 3.1.5 est disponible dans la section bugs de la page de MPFR 3.1.5. Il corrige le bug suivant. Les fonctions de sortie formatée (mpfr_*printf
) provoquent un comportement indéfini ou une assertion non vérifiée quand une précision inférieure à −1 est donnée comme argument pour le spécifieur de conversion f ou F (la précision donnée aurait dû être ignorée).
La bibliothèque GNU MPFR 3.1.5 (canard à l'orange, patch level 5) est sortie. Les changements par rapport à la version 3.1.4:
Compatibilité C++11.
Corrections de bugs (liste détaillée sur la page de MPFR 3.1.4 et dans le fichier ChangeLog).
Plus de tests.
Les patches 5 et 6 de GNU MPFR 3.1.4 sont disponibles dans la section bugs de la page de MPFR 3.1.4. Le patch 5 corrige des bugs dans la fonction interne de test d'arrondi mpfr_can_round_raw
, utilisée par la fonction publique mpfr_can_round
(en particulier, les quelques fonctions mathématiques de MPFR qui utilisent ce test d'arrondi pourraient être arrondies non correctement). Le patch 6 corrige la fonction mpfr_get_ld
, qui n'arrondissait pas correctement dans la plage des dénormalisés sur les plateformes x86.
Le patch 4 de GNU MPFR 3.1.4 est disponible dans la section bugs de la page de MPFR 3.1.4. Il corrige une incompatibilité de certains programmes de test avec la norme C++11 (utilisée par défaut avec g++ de GCC 6) et est utile seulement à ceux qui compilent MPFR avec un tel compilateur C++ (au lieu d'un compilateur C).
A few days ago, I presented my paper Correctly Rounded Arbitrary-Precision Floating-Point Summation at the 23rd IEEE Symposium on Computer Arithmetic (ARITH 23), which took place from July 10 to July 13, 2016, in Santa Clara, California, USA. The goal of this work was a complete rewrite of the mpfr_sum
function for the next GNU MPFR release (version 4.0.0). Here are links to my article and my slides.
Note that I did some improvements since I wrote the article. The slides are more up-to-date, covering the current mpfr_sum
function (r10503) at this time. The current sum.txt file (r10523) contains more details, but it is still not up-to-date (like the article).
Le patch 3 de GNU MPFR 3.1.4 est disponible dans la section bugs de la page de MPFR 3.1.4. Il corrige un bug dans le code de la soustraction (addition de deux nombres de signes différents ou soustraction de deux nombres de même signe), qui peut donner un overflow sur un cas très particulier alors qu'il ne devrait pas (voir le lien pour les détails). Il est très improbable qu'une application soit affectée par ce bug.
J'ai découvert ce bug alors que je relisais une partie du code pour implémenter le support unbounded-float (flottants avec une plage d'exposants non bornée) afin d'éviter des overflows intermédiaires pour les fonctions du style mpfr_fmma
(qui calcule a·b + c·d) ou éventuellement dans le futur, l'évaluation polynomiale avec arrondi correct.
Les patches 1 et 2 de GNU MPFR 3.1.4 sont disponibles dans la section bugs de la page de MPFR 3.1.4. Le premier concerne les utilisateurs de Cygwin 32 bits (sous Microsoft Windows). Le second corrige le positionnement des drapeaux (flags) dans les fonctions mpfr_add_ui
et mpfr_sub_ui
; en pratique, le seul problème est que le drapeau NaN n'est pas positionné avec une entrée NaN.
J'en profite pour signaler qu'il a été décidé lors de la réunion des développeurs de MPFR des 23-24 mai que la prochaine version de MPFR sera la 4.0.
La bibliothèque GNU MPFR 3.1.4 (canard à l'orange, patch level 4) est sortie. Les changements par rapport à la version 3.1.3: améliorations du manuel, corrections de bugs (liste détaillée sur la page de MPFR 3.1.3 et dans le fichier ChangeLog), et support DLL (bibliothèque partagée) thread-safe avec MinGW (pour Microsoft Windows).
Les patches 13 à 17 de GNU MPFR 3.1.3 sont disponibles dans la section bugs de la page de MPFR 3.1.3.
La seconde version candidate de GNU MPFR 3.1.4 est également disponible.
Les patches 6 à 12 de GNU MPFR 3.1.3 sont disponibles dans la section bugs de la page de MPFR 3.1.3. Les conséquences des bugs peuvent être des plantages ou des résultats incorrects dans des cas particuliers. Par exemple, avec GNOME Calculator, le calcul de 2^(1/123456789) provoque un plantage avec une bibliothèque MPFR non patchée.
Joyeux Noël! Pour cette occasion spéciale (en fait, pas vraiment car j'avais prévu de le faire avant), j'ai finalement rendu public les principaux pires cas pour l'arrondi correct de fonctions mathématiques en double précision (binary64). J'ai aussi distribué de petits programmes de test pour les fonctions C natives et la bibliothèque GNU MPFR, qui prennent de telles données en entrée. Tout est accessible depuis ma page web Test de fonctions mathématiques de la bibliothèque standard C (voir Distribution
).
Sur ma page web Programmes de test de l'arithmétique flottante, j'ai ajouté un nouveau programme pour tester certaines optimisations en virgule flottante par un compilateur C. Plus précisément, il teste diverses expressions simples pouvant mener à des transformations par le compilateur dans le but d'optimiser. De telles transformations sont valides sur les nombres réels, mais peuvent ici être invalides à cause des valeurs spéciales IEEE 754 (NaN, infinis, zéros signés).
Les résultats peuvent être affectés par les options de compilation liées aux optimisations d'expressions en virgule flottante. Voir un exemple d'utilisation avec GCC (détails au sujet de la virgule flottante avec GCC). Dans les erreurs, y0 est la valeur obtenue et y1 est la valeur attendue (correcte). Note: on suppose que le qualificateur volatile
a pour effet de désactiver les optimisations, sinon rien n'est testé (voir le source).
Le patch 5 de GNU MPFR 3.1.3 est disponible dans la section bugs de la page de MPFR 3.1.3. Il corrige un bug pouvant amener la fonction mpfr_div
à retourner un résultat incorrect dans des circonstances particulières. Cependant MPFR 3.1.3 est distribuée avec des paramètres de tuning qui ne peuvent pas faire apparaître ce bug.
Les patches 1 à 4 de GNU MPFR 3.1.3 sont disponibles dans la section bugs de la page de MPFR 3.1.3. Ils corrigent divers problèmes en cas d'exception (underflow, overflow, division par zéro) dans quelques fonctions (mpfr_lngamma
, mpfr_mul_2si
, mpfr_div_2ui
, mpfr_div_2si
, mpfr_frexp
).
La bibliothèque GNU MPFR 3.1.3 (canard à l'orange, patch level 3) est sortie. Les changements par rapport à la version 3.1.2: meilleur support d'Automake 1.13+ (maintenant utilisé pour générer l'archive, si bien que les tests de make check sont maintenant exécutés en parallèle), améliorations du manuel et corrections de bugs (liste détaillée sur la page de MPFR 3.1.2 et dans le fichier ChangeLog).
The GNU MPFR 3.1.3 release candidate is available.
ARITH 22 – 22e conférence IEEE sur l'arithmétique des ordinateurs, 22-24 juin 2015, Lyon, France. Date limite d'inscription à tarif réduit: 30 avril 2015.
Mon nouvel article On the maximum relative error when computing integer powers by iterated multiplications in floating-point arithmetic co-écrit avec Stef Graillat et Jean-Michel Muller, qui sera publié dans Numerical Algorithms, est disponible sur:
le site web de l'éditeur (c'est la version officielle et finale, mais elle n'est pas disponible gratuitement si votre bibliothèque n'a pas l'abonnement adéquat);
HAL (quasiment identique à la version finale, et disponible gratuitement).
Note: la version sur arXiv est actuellement plus ancienne.
Résumé:
We improve the usual relative error bound for the computation of xn through iterated multiplications by x in binary floating-point arithmetic. The obtained error bound is only slightly better than the usual one, but it is simpler. We also discuss the more general problem of computing the product of n terms.
Le patch 11 de GNU MPFR 3.1.2 est disponible dans la section bugs de la page de MPFR 3.1.2. Il corrige un dépassement de tampon dans mpfr_strtofr
dû à une erreur dans la documentation de GMP pour mpn_set_str
à propos de la taille d'une mémoire tampon (buffer): annonce et discussion – première correction dans la documentation de GMP. Ce bug est présent dans les versions 2.1.0 (ajoutant mpfr_strtofr
) à 3.1.2 de MPFR.
Divers liens:
Call for papers: 22nd IEEE Symposium on Computer Arithmetic (ARITH-22). Deadline for the abstract: October 26, 2014. Deadline for the full paper: November 2, 2014. Conference: June 22-24, 2015, in Lyon, France.
Les patches 9 et 10 de GNU MPFR 3.1.2 sont disponibles dans la section bugs de la page de MPFR 3.1.2. Ils corrigent les bugs suivants.
Lorsqu'un très grand nombre (proche du nombre fini maximum, en valeur absolue) est divisé par un très petit nombre (proche du minimum, en valeur absolue), un dépassement de capacité (overflow) sur les entiers se produit dans le calcul de l'exposant du résultat, provoquant un comportement indéfini, comme un résultat nul au lieu d'un infini.
Le fichier source vasprintf.c contient des assertions incorrectes, qui peuvent échouer alors que le calcul est valide; ceci peut se produire quand on affiche des nombres minuscules (très petits exposants).
Les patches 4 à 8 de GNU MPFR 3.1.2 sont disponibles dans la section bugs de la page de MPFR 3.1.2 (les patches 4 et 5 datent de quelques mois, mais les patches 6 à 8 ont été ajoutés la nuit dernière). Le bug principal est un possible arrondi incorrect avec mpfr_exp
, seulement quand la précision est d'au moins quelques milliers de bits (sinon le code incorrect n'est pas exécuté). Le dernier patch corrige un problème de compatibilité interne avec GMP 6 (sortie il y a deux semaines) lorsque MPFR est compilée avec une option particulière (généralement pas utilisée).
Je viens de trouver une erreur dans les deux formules sur mon transparent Simple Output sur GNU MPFR (il y a aussi une typo concernant l'anglais). Trois présentations sont affectées. Je n'ai pas modifié mes transparents, mais j'ai ajouté des errata dans la section sur mes transparents.
Note: La bibliothèque GNU MPFR (code et documentation) était correcte.
Avec des collègues, j'ai reçu le Prix La Recherche 2013 dans la catégorie Sciences de l'information, pour notre article: Peter Kornerup, Vincent Lefèvre [Inria], Nicolas Louvet [Université Lyon 1] et Jean-Michel Muller [CNRS]. On the computation of correctly-rounded sums. IEEE Transactions on Computers, 61(3):289–298, mars 2012.
La cérémonie de remise des prix a eu lieu le mardi 22 octobre 2013 au musée du quai Branly à Paris. Les vidéos sont maintenant disponibles sur le site officiel.
Liens:
Les patches 1 à 3 de GNU MPFR 3.1.2 sont disponibles dans la section bugs de la page de MPFR 3.1.2. Le principal bug qui a été corrigé concerne la classe des fonctions mpfr_fits_u*_p non signées: ces fonctions retournaient 0 (doesn't fit
) au lieu de 1 (fits
) sur les arguments négatifs pour lesquels l'arrondi à un entier dans le mode d'arrondi donné est 0 (donc une valeur arrondie représentable).
J'ai mis à jour ma mini-bibliothèque Sipe: j'ai complété l'implémentation basée sur l'arithmétique à virgule flottante et ajouté le support de l'arrondi vers zéro dans l'implémentation basée sur l'arithmétique entière.
À l'occasion de la conférence ARITH-21 à Austin, Texas, USA, où j'ai présenté ma mini-bibliothèque Sipe (anciennement SIPE) le mois dernier, j'ai créé une nouvelle page web dédiée à Sipe, que je viens de mettre à jour. Je fournis maintenant des exemples et des liens sur mes publications et ma présentation à ARITH-21.
La bibliothèque GNU MPFR 3.1.2 (canard à l'orange, patch level 2) est sortie. Les changements par rapport à la version 3.1.1: corrections de bugs (liste détaillée sur la page de MPFR 3.1.1) et mise à jour des exemples à l'API de MPFR 3.x.
Note: Les archives officielles jusqu'à MPFR 3.1.1 sont affectées par un bug de GNU Automake introduisant une vulnérabilité dans make distcheck. Une des raisons de cette nouvelle version est de fournir des archives sans cette vulnérabilité.
GNU MPFR 3.1.2 Release Candidate is available (bug fixes).
Nous avons reçu une annonce disant que pour cause de maintenance technique, l'ensemble des systèmes informatiques du Loria sera arrêté du vendredi 8 février 2013 à 17:30 CET [16:30 UTC] au samedi 9 février 2013 à 18:00 CET [17:00 UTC] (sauf imprévu). Seul le serveur web mpfr.org sera affecté par cet arrêt (ainsi que le courrier envoyé à l'ancienne adresse @loria.fr de la liste de diffusion de MPFR). Merci pour votre compréhension.
De plus, toutes les archives MPFR sont affectées par un bug de GNU Automake introduisant une vulnérabilité dans make distcheck; les utilisateurs de cette commande devraient lire les détails ici.
Une école thématique à laquelle je vais intervenir (session sur l'arithmétique flottante en précision arbitraire, et plus particulièrement sur GNU MPFR): école Précision et Reproductibilité en Calcul Numérique, Fréjus (centre CAES du CNRS), 25-29 mars 2013.
Date limite d'inscription: 15 février 2013.
[Mise à jour du 2021-06-04: nouvelle URL.]
Depuis deux jours, il est maintenant possible de se connecter à vinc17.net et www.vinc17.net via https, e.g. https://vinc17.net/ ou, de manière équivalente, https://www.vinc17.net/. Noter que le certificat est valide seulement pour ces deux noms, si bien que la connexion est complètement sécurisée seulement pour ces deux préfixes d'URL, pas pour les URL avec vinc17.org (je ne veux juste pas payer pour un service qui serait identique).
En tant qu'utilisateur d'InriaForge, j'ai reçu une annonce disant qu'InriaForge sera indisponible le 2012-12-11 de 14:00 à 16:00 CET (13:00 à 15:00 UTC). Ceci affectera les pages de projet MPFR, le dépôt MPFR et l'outil de suivi, mais ni le site web de MPFR, ni les listes de diffusion.
For C programmers of numerical codes, here's a status of floating-point related bugs in GCC and the GNU C Library (glibc), at least those I've been interested in (and some of which I reported). I have grouped them into 4 classes.
In relation to the ISO C standard, still not fixed:
Elementary functions, bugs fixed by Joseph Myers and Andreas Jaeger in March/April 2012, except for the last one (still open – [Update: fixed on 2012-11-28]):
GNU C Library bug 2678: pow
returns incorrect results on underflow
GNU C Library bug 3866: pow
(double, double) does not fulfil several of C99's requirements
GNU C Library bug 3976: libm rounding modes do not work correctly for many archs
GNU C Library bug 13658: sincos()
is incorrect for large inputs on x86_64
GNU C Library bug 13852: sincosf()
, sinf()
, cosf()
, tanf()
are incorrect for large inputs on x86
GNU C Library bug 13854: tan()
is incorrect for large inputs on x86_64 and x86
Bugs involving radix conversions, fixed by Joseph Myers in August/September 2012:
GNU C Library bug 13304: fma
, fmaf
, fmal
produce wrong results, still open.
Les patches 1 et 2 de GNU MPFR 3.1.1 sont disponibles dans la section bugs de la page de MPFR 3.1.1. Le patch 1 corrige plusieurs bugs dans la fonction mpfr_get_decimal64
(disponible uniquement lorsque MPFR a explicitement été configurée avec l'option --enable-decimal-float). Le patch 2 corrige un bug dans la fonction mpfr_strtofr
: sa valeur ternaire peut être incorrecte dans des conditions particulières.
La bibliothèque GNU MPFR 3.1.1 (canard à l'orange, patch level 1) est sortie. Les changements par rapport à la version 3.1.0: améliorations du manuel et corrections de bugs (liste détaillée sur la page de MPFR 3.1.0).
Nous avons reçu une annonce disant que pour cause de maintenance technique, l'ensemble des systèmes informatiques du Loria sera arrêté du vendredi 1er juin 2012 à 17:30 CEST [15:30 UTC] au samedi 2 juin 2012 à 19:00 CEST [17:00 UTC] (sauf imprévu). Seul le serveur web mpfr.org sera affecté par cet arrêt (ainsi que le courrier envoyé à l'ancienne adresse @loria.fr de la liste de diffusion de MPFR).
Merci pour votre compréhension.
Une réunion de développeurs MPFR-MPC aura lieu du 25 au 27 juin 2012 à Bordeaux, France. Plus d'information.
Les patches 9 et 10 de GNU MPFR 3.1.0 sont disponibles dans la section bugs de la page de MPFR 3.1.0. Ils corrigent des bugs liés à l'overflow/underflow dans la fonction mpfr_gamma
.
Les listes de diffusion de MPFR (la principale et celle d'annonces) seront migrées sur un nouveau serveur le jeudi 3 mai 2012 de 9:30 CEST (7:30 UTC) à 11:30 CEST (9:30 UTC) environ. Pendant cette migration, les messages postés seront mis en file d'attente jusqu'à ce que le nouveau serveur soit opérationnel, et l'interface web du serveur de listes sera indisponible. Une fois la migration terminée, l'interface web sera disponible à une nouvelle adresse (éventuellement en plus de l'ancienne?).
Peu après la migration, le serveur web de MPFR sera mis à jour pour refléter ces changements.
Les patches 7 et 8 de GNU MPFR 3.1.0 sont disponibles dans la section bugs de la page de MPFR 3.1.0. Le premier corrige un problème avec de très grandes précisions, proches de la limite théorique provenant du type utilisé pour la précision. Le second permet d'utiliser MPFR avec la version de développement de GMP (et les futures versions à partir de la 5.1.0).
Les patches 5 et 6 de GNU MPFR 3.1.0 sont disponibles dans la section bugs de la page de MPFR 3.1.0. Tous deux corrigent des bugs qui ne peuvent se produire que si le logging est utilisé. Explications détaillées, en anglais:
When logging is used (note that logging support must have explicitly been enabled in the MPFR build), e.g. with MPFR_LOG_ALL=1
, the program may randomly freeze (observed with dynamic linking), take a lot of memory or have other random behavior. The problem actually occurs in the following functions: mpfr_add_d
, mpfr_add_ui
and mpfr_mul_d
; but mpfr_add_ui
is used by other functions (directly or indirectly). This is due to a typo in an argument for the internal logging macro MPFR_LOG_FUNC
: instead of the variable mpfr_log_prec
(whose value is 6 by default), the function pointer mpfr_get_prec
is used, and it has an arbitrary value. This bug (#13933) is fixed by the logging-freeze patch (patch05).
In the logging system, an incorrect format is used for MPFR_LOG_VAR
. If the logged variable has a huge value, the output has many digits; this can potentially take much memory and disk space. This bug is fixed by the logging-varfmt patch (patch06).
Une nouvelle version de SIPE (48201 2011-12-12 01:47:58Z) est disponible. Elle corrige quelques bugs par rapport à la version du 2009-11-17. Cet outil est décrit et partiellement prouvé dans mon nouveau rapport de recherche: SIPE: Small Integer Plus Exponent [HAL / dans ma liste de publications].
Résumé: SIPE est une mini-bibliothèque sous forme de fichier d'en-tête C permettant d'effectuer des calculs à très basses précisions avec arrondi correct au plus près. Le but d'un tel outil est de faire des preuves d'algorithmes/propriétés ou des calculs de bornes d'erreur dans ces précisions, afin de les généraliser à des précisions supérieures. Les opérations supportées sont l'addition, la soustraction, la multiplication, le FMA, et diverses comparaisons et conversions.
Le patch 3 de GNU MPFR 3.1.0 est disponible dans la section bugs de la page de MPFR 3.1.0. Il corrige le bug suivant.
Les fonctions de sortie formatée (mpfr_*printf
) peuvent écrire/renvoyer une chaîne incorrecte quand la valeur est arrondie vers la prochaine puissance de 10 (par exemple, 999.99999... imprimé avec "%.20RNg" peut donner "100" au lieu de "1000"). Ce bug a toujours été présent (depuis que ces fonctions ont été introduites dans MPFR 2.4.0).
Le patch 1 de GNU MPFR 3.1.0 est disponible dans la section bugs de la page de MPFR 3.1.0. Il corrige la version GCC de la définition de la macro interne MPFR_UNLIKELY
. Le code compilé peut être affecté quand un limb est plus grand qu'un long
(par exemple avec certaines ABI, comme mode32 sur PowerPC). La définition de MPFR_UNLIKELY
pour GCC était incorrecte depuis que cette macro a été introduite dans MPFR 2.1.0, mais des problèmes ont commencé à être visibles seulement dans MPFR 3.1.0 avec toutes les assertions vérifiées (le code de MPFR est normalement écrit de manière à fonctionner avec la définition incorrecte).
La bibliothèque GNU MPFR 3.1.0 (canard à l'orange) est sortie. Les changements par rapport aux versions 3.0.*:
Le source de MPFR a été réorganisé.
Support ansi2knr abandonné.
Le support TLS est maintenant détecté automatiquement. Si le TLS est supporté, MPFR est compilée avec TLS par défaut. Pour désactiver le TLS explicitement, configurer MPFR avec --disable-thread-safe.
Nouvelle option de configure --enable-gmp-internals pour utiliser des fonctions non documentées de GMP (ne faisant pas partie de l'API publique). Notez que que le library versioning n'a aucune garantie de fonctionner si cette option est utilisée.
Les fonctions mpfr_urandom
et mpfr_urandomb
retournent maintenant des valeurs identiques sur des processeurs avec des tailles de mots différentes (en supposant que la graine du générateur de nombres pseudo-aléatoires est la même, et que le générateur de GMP ne dépende pas lui-même de la taille de mot, cf https://gmplib.org/list-archives/gmp-devel/2010-September/001642.html).
Les macros mpfr_add_one_ulp
et mpfr_sub_one_ulp
(obsolètes et plus documentées) seront supprimées dans une future version.
Amélioration de la rapidité des fonctions mpfr_sqr
et mpfr_div
en utilisant l'algorithme de Mulders. En conséquence, d'autres fonctions utilisant ces routines seront aussi plus rapides.
Sortie formatée (mpfr_printf
, etc.) avec %Rg et similaire beaucoup plus rapide.
L'option de configure --with-gmp-build peut maintenant être utilisée quand le répertoire source de GMP et le répertoire de compilation sont différents (sans avoir à copier les fichiers d'en-tête manuellement comme avant).
Nouvelles fonctions mpfr_buildopt_gmpinternals_p
, mpfr_buildopt_tune_case
, mpfr_frexp
, mpfr_grandom
et mpfr_z_sub
Nouvelle exception divide-by-zero (drapeau) et fonctions associées.
L'en-tête mpfr.h peut maintenant être inclue plusieurs fois, tout en continuant de supporter les fonctions optionnelles (voir la section Headers and Libraries dans le manuel).
Mise à jour des paramètres de tuning.
Amélioration du manuel de MPFR.
Tests de MPFR: libtool ne génère plus des scripts wrapper avec make check
(si bien que lancer les tests sous valgrind ou gdb est plus facile).
Correction de bugs.
The second GNU MPFR 3.1.0 release candidate is available.
GNU MPFR 3.1.0 Release Candidate is available.
La norme ISO/IEC/IEEE 60559:2011 sur l'arithmétique à virgule flottante, correspondant à la norme IEEE 754-2008, a été publiée (stage 60-60, 2011-07-07).
mpfr_min_prec
de GNU MPFRNote à propos de la fonction mpfr_min_prec
de GNU MPFR: elle est apparue dans la version 3.0.0, mais n'était pas listée dans les nouveautés. J'ai corrigé la page web de GNU MPFR 3.0.0, ainsi que le fichier NEWS et le manuel de MPFR pour les versions futures de MPFR.
L'INRIA recrute un ingénieur jeune diplômé pour du développement lié à la bibliothèque GNU MPFR (contrat de 12 mois, renouvelable une fois). Fiche de poste / fiche sur le site de l'INRIA. Pour être éligible, un IJD doit avoir obtenu son diplôme au cours de l'année précédant son recrutement (donc 2010 ou 2011).
Date limite de candidature: 30 septembre 2011.
Le patch 4 de GNU MPFR 3.0.1 est disponible dans la section bugs de la page de MPFR 3.0.1. Il corrige le bug suivant dans les tests (ce n'est pas un bug dans la bibliothèque elle-même).
Le test texp ne filtre pas la valeur 0 (qui peut apparaître avec certaines graines, fixées par GMP_CHECK_RANDOMIZE) lors de la comparaison des fonctions internes mpfr_exp_2
et mpfr_exp_3
. La conséquence est un échec de ce test si cela se produit.
Les patch 2 et patch 3 de GNU MPFR 3.0.1 sont disponibles dans la section bugs de la page de MPFR 3.0.1. Ils corrigent les problèmes suivants:
La fonction mpfr_rec_sqrt
peut avoir un comportement indéfini à cause de l'appel à mpn_add_1
ou mpn_sub_1
(de GMP) avec une taille nulle, ce qui n'est pas autorisé. Le quatrième argument de mpn_add_1
ou mpn_sub_1
(i.e. la valeur qui aurait dû être ajoutée ou soustraite) est ici aussi 0, si bien que les conséquences sont limitées. En pratique, avec la version actuelle de GMP, ceci produit un petit dépassement de tampon (1 limb, i.e. 32 bits ou 64 bits), comme indiqué par valgrind, avec les conséquences possibles: un plantage, ou corruption de mémoire (très peu probable) si un autre processus ou thread modifie le limb au même moment (puisque dans ce contexte, la valeur est d'abord lue puis réécrite par GMP). Ce bug a toujours été présent depuis l'introduction de la fonction mpfr_rec_sqrt
dans MPFR 2.4.0.
La fonction mpfr_atan
appelle mpfr_check_range
sur le résultat non arrondi (qui n'est plus alloué) au lieu du résultat arrondi. Conséquence de ce bug: résultat pouvant être incorrect ou invalide et/ou drapeaux incorrects si le résultat non arrondi ou arrondi ne se trouve pas dans la plage d'exposants courante. Ou éventuellement pire si la mémoire utilisée par le résultat non arrondi est modifiée avant le retour de la fonction. Ce bug est présent depuis MPFR 2.1.0 (les exceptions n'étaient pas supportées auparavant).
Le patch 1 de GNU MPFR 3.0.1 est disponible dans la section bugs de la page de MPFR 3.0.1 depuis deux semaines. Il corrige le bug suivant, qui ne devrait probablement jamais se produire dans des codes utilisateurs: si la plage d'exposants a été réduite de façon à ce que emax = 1 ou 2, mpfr_asin
peut donner un résultat incorrect sur +1 et -1.
La bibliothèque GNU MPFR 3.0.1 (boudin aux pommes, patch level 1) est sortie. Les changements par rapport à la version 3.0.0: corrections de bugs (liste détaillée sur la page de MPFR 3.0.0).
Nous avons reçu une annonce disant que l'ensemble des systèmes informatiques du Loria sera arrêté du vendredi 1er avril 2011 à 18:00 CEST (16:00 UTC) au lundi 4 avril 2011 à 09:00 CEST (07:00 UTC). Le serveur web mpfr.org et la liste de diffusion de MPFR seront affectés par cet arrêt.
Par conséquent, la sortie de GNU MPFR 3.0.1 est reportée au 4 avril.
Merci pour votre compréhension.
GNU MPFR 3.0.1 Release Candidate is available (bug fixes).
Les annonces de mes nouveaux billets dans mon blog sont maintenant postées sur mon compte identi.ca (avec le renvoi usuel sur mon compte Twitter) lorsque le billet est disponible en anglais, et uniquement sur mon compte Twitter lorsque le billet est uniquement en français.
Compte-rendu de la réunion de développeurs MPFR-MPC, qui s'est tenue à Paris les jeudi 13 et vendredi 14 janvier 2011. GNU MPFR 3.0.1 devrait sortir dans quelques semaines.
À chaque fois que je poste un nouveau billet dans mon blog, une annonce est maintenant automatiquement envoyée sur mon compte Twitter. Cela devrait être le cas pour celui-ci...
Le patch 8 de GNU MPFR 3.0.0 est disponible dans la section bugs de la page de MPFR 3.0.0. Le patch 4 a introduit deux problèmes mineurs: D'abord, si l'utilisateur définit une macro avec le même nom que certains mots-clés (ce qui est implicitement découragé), le comportement peut être incorrect (échec de compilation de code utilisateur, résultats faux...); ce problème était déjà présent pour d'autres macros. Ensuite, la vérification de type habituelle n'était plus toujours faite; par exemple, passer un pointeur au lieu d'un entier n'était plus considéré comme une erreur à la compilation. Ce patch corrige ces problèmes. Notez cependant que la définition d'une macro avec le nom do, while ou sizeof est toujours interdite, et d'autres restrictions peuvent être ajoutées dans le futur (à moins que MPFR_USE_NO_MACRO n'ait été définie).
Les patches 5 à 7 de GNU MPFR 3.0.0 sont disponibles dans la section bugs de la page de MPFR 3.0.0.
Le patch 5 corrige un bug dans le test tcan_round (qui peut échouer, mais les utilisateurs normaux ne devraient pas remarquer d'échec).
Le patch 6 corrige un bug dans le code de la soustraction sur certains cas particuliers. Ce bug était présent dans toutes les versions de MPFR. La conséquence peut être un arrondi incorrect ou même un comportement indéfini. Ce bug ne peut pas se produire si les précisions des arguments (valeurs d'entrée et de sortie) sont les mêmes, mais il peut aussi être produit par des fonctions appelant mpfr_add
ou mpfr_sub
avec des précisions différentes, e.g. par mpfr_fma
et mpfr_fms
. L'application de ce patch est vivement recommandée.
Le patch 7 corrige un bug dans mpfr_set_ld
, qui peut se produire sur de très petites valeurs. En pratique, seules des plateformes avec quadruple précision devraient être affectées; mais de telles plateformes sont peu courantes.
Le patch 4 de GNU MPFR 3.0.0 est disponible dans la section bugs de la page de MPFR 3.0.0. Il corrige les problèmes suivants dans les macros mpfr_cmp_ui
, mpfr_cmp_si
, mpfr_set_ui
et mpfr_set_si
pour les compilateurs basés sur GCC:
Dans la macro mpfr_cmp_ui
pour les compilateurs basés sur GCC, quand le second argument est une expression constante de value nulle, le premier argument est évalué deux fois, rendant le comportement incorrect quand l'évaluation du premier argument a des effets secondaires. La macro mpfr_cmp_si
utilise mpfr_cmp_ui
, et est donc affectée par ce bug. Notez que bien que mpfr_cmp_ui
et mpfr_cmp_si
soient décrites comme des fonctions, elles sont aussi implémentées en tant que macros dans mpfr.h (sauf en cas de bug comme ici, une implémentation par une macro ne devrait pas introduire de différence dans le comportement).
Un problème beaucoup moins important est que les macros mpfr_cmp_si
et mpfr_set_si
pour les compilateurs basés sur GCC (dans mpfr.h) peuvent produire des avertissements (warnings) quand du code utilisateur est compilé avec l'option -Wconversion.
Ces macros mpfr_cmp_ui
, mpfr_cmp_si
, mpfr_set_ui
et mpfr_set_si
pour les compilateurs basés sur GCC peuvent avoir un comportement incorrect si du code utilisateur avec comportement indéfini demande un comportement spécifié par une certaine extension non standard de C (comme avec l'utilisation de l'option -fwrapv de GCC) et que l'appel est fait avec un argument qui demande une conversion implicite vers unsigned long ou long.
Le patch 3 de GNU MPFR 3.0.0 est disponible dans la section bugs de la page de MPFR 3.0.0. Il corrige la détection de l'underflow dans la fonction mpfr_gamma
.
Les patch 1 et patch 2 de GNU MPFR 3.0.0 sont disponibles dans la section bugs de la page de MPFR 3.0.0.
Le patch 1 corrige les cas spéciaux suivants de la fonction mpfr_out_str
: La valeur entière retournée par mpfr_out_str
est incorrecte sur NaN et les infinis. De plus, les erreurs de sortie ne sont pas prises en compte, et si une telle erreur se produit, la valeur retournée est incorrecte (elle aurait dû être 0).
Le patch 2 corrige un problème de compilation sur certains environnements comme Solaris avec le compilateur de Sun; il peut être vu avec make check
, où une erreur typique est que le symbole alloca est indéfini. Ce problème a été introduit dans MPFR 3.0.0 (il n'était pas présent dans les versions précédentes).
La bibliothèque GNU MPFR 3.0.0 (boudin aux pommes) est sortie. Les changements par rapport aux versions 2.4.* (liste corrigée le 2010-12-07):
MPFR 3.0.0 est incompatible avec les versions précédentes au niveau du binaire, mais (presque) compatible au niveau de l'API. Plus précisément, les fonctions obsolètes mpfr_random
et mpfr_random2
ont été retirées, la signification du type de retour de la fonction mpfr_get_f
a changé, et le type de retour de la fonction mpfr_get_z
est maintenant int au lieu de void. En pratique, cela ne devrait pas casser de code existant.
MPFR est maintenant distribuée sous la GNU Lesser General Public License version 3 ou ultérieure (LGPL v3+).
Les modes d'arrondi GMP_RNDx
sont maintenant MPFR_RNDx
(GMP_RNDx
gardés pour la compatibilité).
Un nouveau mode d'arrondi (MPFR_RNDA
) est disponible pour arrondir à l'opposé de zéro (away from zero).
Le type des modes d'arrondi est maintenant mpfr_rnd_t (comme dans les versions précédentes, mpfr_rnd_t et mp_rnd_t sont acceptés, mais mp_rnd_t pourrait être retiré dans le futur).
Le type pour la précision est maintenant mpfr_prec_t (comme dans les versions précédentes, mpfr_prec_t et mp_prec_t sont acceptés, mais mp_prec_t pourrait être retiré dans le futur) et il est maintenant signé (il était non signé dans MPFR 2.*, mais cela n'était pas documenté). En pratique, ce changement ne devrait pas affecter les codes existants qui ne supposaient rien sur le type pour la précision.
MPFR a maintenant son type pour l'exposant mpfr_exp_t, qui est actuellement le même que le mp_exp_t de GMP.
Les fonctions mpfr_random
et mpfr_random2
ont été retirées.
mpfr_get_f
et mpfr_get_z
retournent maintenant une valeur ternaire.
mpfr_strtofr
accepte maintenant les bases de 37 à 62.
mpfr_custom_get_mantissa
a été renommée en mpfr_custom_get_significand
(mpfr_custom_get_mantissa
est toujours disponible via un #define
).
Les fonctions mpfr_get_si
, mpfr_get_ui
, mpfr_get_sj
, mpfr_get_uj
, mpfr_get_z
et mpfr_get_z_2exp
n'ont plus de cas avec comportement indéfini; dans ces cas, le comportement est maintenant spécifié, et en particulier, le drapeau erange est positionné.
Nouvelles fonctions mpfr_buildopt_tls_p
et mpfr_buildopt_decimal_p
donnant des informations sur les options utilisées à la compilation de MPFR.
Nouvelle fonction mpfr_regular_p
.
Nouvelle fonction mpfr_set_zero
.
Nouvelle fonction mpfr_digamma
.
Nouvelle fonction mpfr_ai
(incomplète, expérimentale).
Nouvelles fonctions mpfr_set_flt
et mpfr_get_flt
pour convertir depuis/vers le type float.
Nouvelle fonction mpfr_urandom
.
Nouvelle fonction mpfr_set_z_2exp
(compagnon de mpfr_get_z_2exp
, renommée à partir de la fonction mpfr_get_z_exp
des versions précédentes).
Amélioration de la vitesse pour des grandes précisions des fonctions trigonométriques (mpfr_sin
, mpfr_cos
, mpfr_tan
, mpfr_sin_cos
): gain d'un facteur environ 2,5 pour 105 chiffres, d'à peu près 5 pour 106 chiffres.
Amélioration de la vitesse pour des grandes précisions des fonctions trigonométriques inverses (arcsin, arccos, arctan): facteur d'environ 2 pour 103 chiffres, jusqu'à 2,7 pour 106 chiffres.
Quelques fichiers de documentation sont installés dans $docdir
.
La détection d'un répertoire de compilation de GMP (plus précisément, les fichiers d'en-têtes internes de GMP) était précédemment effectuée séparément de l'utilisation de l'option de configure --with-gmp-build. Ceci n'était pas cohérent avec la documentation et avec d'autres parties du script configure. Ainsi, à partir de MPFR 3.0.0, les fichiers d'en-têtes internes de GMP sont maintenant utilisés si et seulement si l'option de configure --with-gmp-build est donnée.
Le script configure reconnaît certains formats long double supplémentaires (double big endian, double little endian, double-double big endian).
Manuel de MPFR: une section API Compatibility a été ajoutée.
Correction de bugs.
GNU MPFR 3.0.0 Release Candidate 2 is available.
pow(-0.0,0.5)
vs sqrt(-0.0)
et GCCD'après l'annexe F de la norme ISO C99 (et la norme IEEE 754-2008, mais pas encore référencée par la norme C), pow(-0.0,0.5)
doit retourner +0, alors que sqrt(-0.0)
doit retourner -0. La seconde forme était en fait définie par l'ancienne norme IEEE 754-1985 et en pratique, elle est implémentée en matériel (par les processeurs). En suivant une discussion dans la liste de développement de GCC, j'ai remarqué que GCC transforme pow(x,0.5)
en sqrt(x)
même pour la valeur -0, ce qui n'est pas correct. GCC 4.3.* et 4.4.3 (mais pas GCC 4.2.*) sont affectés par ce bug, que j'ai rapporté. Il a été corrigé quelques heures plus tard.
INRIAGforge, qui héberge le dépôt Subversion de MPFR, va être mis à jour le 8 mars. À cause de cette migration, les pages web sur INRIAGforge seront indisponibles le 8 mars de 13:30 à 16:30 CET (12:30 à 15:30 UTC), et l'accès au dépôt Subversion sera indisponible de 16:30 à 17:30 CET (15:30 à 16:30 UTC).
Le site web de MPFR et la liste de diffusion ne sont pas hébergés sur INRIAGforge, et ne seront donc pas affectés.
Le livre Handbook of Floating-Point Arithmetic, écrit par plusieurs membres d'Arénaire (dont moi-même), est disponible depuis quelques semaines.
Floating-point arithmetic is by far the most widely used way of implementing real-number arithmetic on modern computers. Although the basic principles of floating-point arithmetic can be explained in a short amount of time, making such an arithmetic reliable and portable, yet fast, is a very difficult task. From the 1960s to the early 1980s, many different arithmetics were developed, but their implementation varied widely from one machine to another, making it difficult for nonexperts to design, learn, and use the required algorithms. As a result, floating-point arithmetic is far from being exploited to its full potential.
This handbook aims to provide a complete overview of modern floating-point arithmetic, including a detailed treatment of the newly revised (IEEE 754-2008) standard for floating-point arithmetic. Presented throughout are algorithms for implementing floating-point arithmetic as well as algorithms that use floating-point arithmetic. So that the techniques presented can be put directly into practice in actual coding or design, they are illustrated, whenever possible, by a corresponding program.
Key topics and features include:
Presentation of the history and basic concepts of floating-point arithmetic and various aspects of the past and current standards
Development of smart and nontrivial algorithms, and algorithmic possibilities induced by the availability of a fused multiply-add (FMA) instruction, e.g., correctly rounded software division and square roots
Implementation of floating-point arithmetic, either in software—on an integer processor—or hardware, and a discussion of issues related to compilers and languages
Coverage of several recent advances related to elementary functions: correct rounding of these functions and computation of very accurate approximations under constraints
Extensions of floating-point arithmetic such as certification, verification, and big precision
Handbook of Floating-Point Arithmetic is designed for programmers of numerical applications, compiler designers, programmers of floating-point algorithms, designers of arithmetic operators, and more generally, students and researchers in numerical analysis who wish to better understand a tool used in their daily work and research.
Nous avons reçu une annonce disant que l'ensemble des systèmes informatiques du Loria sera arrêté du vendredi 5 février à 17:00 (16:00 UTC) au dimanche 7 février à 19:00 (18:00 UTC). Le serveur web mpfr.org et la liste de diffusion de MPFR seront affectés par cet arrêt. Merci pour votre compréhension.
Le patch 3 de MPFR 2.4.2 est disponible dans la section bugs de la page de MPFR 2.4.2. Il permet de compiler MPFR avec les fichiers internes de GMP 5 (c'est nécessaire à cause d'un changement interne à GMP), i.e. en utilisant l'option --with-gmp-build. Note: la plupart des utilisateurs n'a pas besoin de ce patch.
Interruption planifiée d'InriaGforge: le 2010-01-14, de 17:00 à 19:00 heure française (16:00 à 18:00 UTC), le site InriaGforge et tous les services associés seront indisponibles pour cause d'opérations de maintenance sur les serveurs.
Le site web et la liste de diffusion de MPFR ne seront pas affectés.
Les patch 1 et patch 2 de MPFR 2.4.2 sont disponibles dans la section bugs de la page de MPFR 2.4.2.
Le patch 1 corrige un bug mineur: le drapeau underflow n'est pas positionné quand la fonction mpfr_sin_cos
est appelée sur le plus petit nombre strictement positif ou son opposé en arrondi vers zéro ou équivalent.
Le patch 2 permet de compiler MPFR sur les processeurs MIPS avec GCC 4.4 ou version ultérieure.
La bibliothèque GNU MPFR 2.4.2 (andouillette sauce moutarde, patch level 2) est sortie. Les changements par rapport à la version 2.4.1:
Correctif de sécurité dans les fonctions de sortie formatée (débordement de tampon).
Fonctions de sortie formatée: 6 est maintenant la valeur par défaut pour un champ de précision vide avec %Rf.
Meilleure portabilité du script configure.
Détection des types intmax_t et uintmax_t.
Amélioration de la documentation: mpfr_get_z_exp
, mpfr_strtofr
, mpfr_get_str
et fonctions de sortie formatée.
Message plus précis en cas d'échec d'assertion.
Mise à jour du test tcmp_ld pour tester réellement les long double.
Quelques fichiers de documentation sont installés dans $docdir
.
Suppression de mpfr_init_cache
(fonction non utilisée et non documentée).
Correction de la façon dont $CC
/ $CFLAGS
sont obtenus grâce à gmp.h (__GMP_CC
/ __GMP_CFLAGS
).
Correction de bugs.
Notez aussi que GCC 4.4.0 (seulement cette version obsolète) ne compile pas MPFR 2.4.2 correctement; ce problème est détecté par make check
(échec de tget_z et tpow_all).
The third release candidate of GNU MPFR 2.4.2 is available.
The main problem found in the second release candidate (also present in previous MPFR versions): When gcc is installed, gmp.h contains __GMP_CC
/ __GMP_CFLAGS
information, and GMP has been compiled with a compiler somewhat incompatible with gcc (this can be the default on some machines), then the build of MPFR can fail. The reason is that the configure script detected the presence of gcc before the compiler from __GMP_CC
was chosen (replaced gcc), so that the script did some settings related to gcc (due to some autoconf macro), such as selecting gcc-specific options for dependency tracking.
The second release candidate of GNU MPFR 2.4.2 is available.
Moreover I've just fixed a bug in mpfr_sin_cos
and updated the bugs section of the GNU MPFR 2.4.1 page.
Les 3es rencontres Arithmétique de l'Informatique Mathématique (RAIM'09) auront lieu à Lyon, au Laboratoire de l'Informatique du Parallélisme (ENS Lyon), du lundi 26 au mercredi 28 octobre 2009. Ces rencontres sont organisées dans le cadre du Groupe de Travail Arithmétique du GDR Informatique Mathématique, pôle Calcul Formel, Arithmétique et Géométrie.
La date limite d'inscription est fixée au lundi 12 octobre 2009.
L'inscription est sans frais, mais nécessaire à des fins d'organisation. Le formulaire est accessible sur le site web des rencontres.
Cette édition est organisée autour de cinq thèmes:
Numération (responsable: Anne Siegel).
Géométrie et arithmétique (responsable: Dominique Michelucci).
Opérateurs arithmétiques (responsable: Laurent-Stéphane Didier).
Validation numérique et preuve formelle (responsable: Micaela Mayero).
Calcul formel (responsable: Alin Bostan).
Ces rencontres comportent également deux cours d'une heure sur des domaines proches:
Traitement du signal (Daniel Ménard).
Nouvelles architectures (David Defour et Florent de Dinechin).
Le programme détaillé est disponible depuis le site web des rencontres.
J'ai reçu l'annonce suivante. En résumé, l'ensemble des systèmes informatiques du Loria sera arrêté du vendredi 18 septembre à 18:00 (16:00 UTC) au samedi 19 septembre à 20:00 (18:00 UTC). Le serveur web mpfr.org et la liste de diffusion de MPFR seront affectés par cet arrêt. Merci pour votre compréhension.
Pour une raison inconnue, le serveur web de MPFR (mpfr.org) est injoignable depuis l'après-midi du samedi 20 juin (au moins); d'autres serveurs hébergés au Loria sont aussi affectés. Ceci peut durer jusqu'à lundi. Désolé pour le dérangement.
[Mise à jour] C'est reparti depuis 2009-10-22 07:00 UTC. C'était dû à une coupure de courant.
Quelques informations après la conférence Arith-19... Les articles peuvent être récupérés depuis la page du programme du site web d'Arith-19. La date limite pour le numéro spécial est le 2009-08-03.
Nous (Andreas Enge, Vincent Lefèvre, Philippe Théveny et Paul Zimmermann) organisons une école d'été sur MPFR et MPC les 25 et 26 juin, après la précédente édition d'octobre 2007, qui a connu un franc succès. Cette école est destinée aux chercheurs ou ingénieurs du public ou privé qui désirent appréhender ces bibliothèques. Cette école consistera en moitié d'exposés et moitié de travaux pratiques sur machine, où les participants apprendront comment utiliser au mieux MPFR et MPC sur de petits exercices. Les participants sont aussi invités à venir avec leurs propres problèmes.
A priori l'école sera en français, cependant si des participants non francophones s'inscrivent, il est possible qu'elle soit en anglais.
[Mise à jour 2009-03-30] Il est maintenant possible de s'inscrire (date limite d'inscription le 19 juin, ou le 29 mai avec hébergement).
Les patch 3 et patch 4 de MPFR 2.4.1 sont disponibles dans la section bugs de la page de MPFR 2.4.1.
Le patch 3 ajoute des casts dans les tests. Avec la plupart des implémentations C (voire toutes), les tests ne devraient pas être affectés par ces casts manquants.
Le patch 4 corrige le bug suivant. Un type est incorrect dans le fichier vasprintf.c. En pratique, cela peut faire planter MPFR lorsque le spécifieur M (pour les fonctions de sortie formatée) est utilisé et qu'un limb n'a pas la même taille qu'un pointeur (e.g. quand GMP a été compilé avec ABI=mode32
sur PowerPC G5).
Le patch 2 de MPFR 2.4.1 est disponible dans la section bugs de la page de MPFR 2.4.1. Il corrige un problème mineur dans les messages d'assertions non vérifiées, qui n'indiquent pas explicitement que l'échec a été détecté dans MPFR.
Le tronc de MPFR est passé à la version 3.0 (ou plus) de la licence GNU Lesser General Public License (LGPL). Ce sera ainsi la licence de la future MPFR 3.0.
Interruption planifiée d'InriaGforge: le 2009-03-09, de 18:45 à 20:15 UTC, le site InriaGforge et tous les services associés seront indisponibles pour cause d'opérations de maintenance sur les serveurs.
Le patch 1 de MPFR 2.4.1 est disponible dans la section bugs de la page de MPFR 2.4.1. Il corrige un bug dans les fonctions de reste (mpfr_fmod
, mpfr_remainder
et mpfr_remquo
): ces fonctions arrondissent le résultat avant de changer son signe quand l'entrée x est négative. La conséquence est que dans les modes d'arrondi non symétriques (GMP_RNDD
et GMP_RNDU
), le résultat est arrondi dans la mauvaise direction.
Suite à un débordement de tampon (buffer overflow) que j'ai découvert un peu par hasard lors de la relecture du source des fonctions de sortie formatée de MPFR (car je pensais avoir trouvé un bug dans mpfr_printf
, alors qu'il s'agissait en fait d'un joli effet secondaire quelque part dans mon code), pouvant avoir des conséquences d'un point de vue de la sécurité, nous avons décidé de sortir immédiatement cette nouvelle version: GNU MPFR 2.4.1. Les changements par rapport à la version 2.4.0:
Correctif de sécurité dans mpfr_snprintf
et mpfr_vsnprintf
(débordement de tampon).
Configure: nouvelles vérifications des modificateurs de longueur hh et ll (nouveaux dans C99) car hh est absent sur alpha-OSF1-V5.
Diverses corrections dans le manuel de MPFR. En particulier, mpfr_inits
, mpfr_inits2
, mpfr_clears
et MPFR_DECL_INIT
sont dans l'API publique depuis MPFR 2.4.0.
À cause d'une coupure de courant, les serveurs hébergeant mpfr.org et la liste de diffusion de MPFR seront arrêtés à partir de 17:00 UTC aujourd'hui le 3 février jusqu'à 08:00 UTC demain le 4 février.
Notez que les serveurs InriaGforge (Subversion...) ne seront pas affectés.
La bibliothèque GNU MPFR 2.4.0 (andouillette sauce moutarde) est sortie. Les changements par rapport aux versions 2.3.*:
MPFR est maintenant un paquet GNU.
Changements dans le comportement de mpfr_strtofr
et dans sa documentation concernant des cas particuliers où le code et la documentation étaient contradictoires; ce changement est aussi présent dans MPFR 2.3.1.
Le comportement de mpfr_check_range
a changé: si la valeur est un infini inexact, le drapeau overflow est positionné (au cas où il aurait été perdu); ce changement est aussi présent dans MPFR 2.3.2.
La fonction mpfr_init_gmp_rand
(définie seulement lorsque MPFR est construite avec l'option de configure --with-gmp-build) n'est plus définie du tout. Cette fonction était privée et non documentée, et était utilisée seulement dans la suite de tests de MPFR. Un code utilisateur qui l'appellerait est considéré comme incorrect et peut échouer en conséquence. L'exécution de l'ancienne suite de tests sur MPFR 2.4.0 peut aussi échouer.
Nouvelles fonctions:
entre un nombre MPFR et un double: mpfr_add_d
, mpfr_sub_d
, mpfr_d_sub
, mpfr_mul_d
, mpfr_div_d
, mpfr_d_div
;
entrées/sorties formatées: mpfr_printf
, mpfr_fprintf
, mpfr_vprintf
, mpfr_vfprintf
, mpfr_sprintf
, mpfr_snprintf
, mpfr_vsprintf
, mpfr_vsnprintf
, mpfr_asprintf
, mpfr_vasprintf
;
mpfr_sinh_cosh
, mpfr_li2
, mpfr_modf
, mpfr_fmod
, mpfr_rec_sqrt
.
Test de configuration pour le support TLS.
Récupération des valeurs par défaut de $CC
et $CFLAGS
dans le gmp.h (__GMP_CC
/ __GMP_CFLAGS
, disponibles à partir de GMP 4.2.3).
Documentation du fait que mpfr_random
et mpfr_random2
seront supprimées dans la prochaine version, et que la spécification de mpfr_eq
pourra changer dans la prochaine version (pour compatibilité avec la couche mpf de GMP).
Correction de bugs.
The third release candidate of MPFR 2.4.0 is available. Note that if MPFR is built using GMP's build directory, the compilation of the tests will fail with an error like: error: invalid lvalue in unary `&'. This problem has been fixed in the trunk (and the release will have the fix, after some more tests).
Also, the MPFR web site will not be reachable on January 23 between 06:00 and 06:30 UTC.
An efficient rounding boundary test for pow
(x,y) in double precision, écrit avec Christoph Lauter, dans IEEE Transactions on Computers, 58(2):197–207, février 2009. La mauvaise typographie et les figures en bitmap ne sont pas de notre faute.
Computing correctly rounded integer powers in floating-point arithmetic (PDF), écrit avec Peter Kornerup, Christoph Lauter, Nicolas Louvet et Jean-Michel Muller (rapport de recherche). Une version mise à jour sera publiée dans ACM Transactions on Mathematical Software en 2009.
Worst cases for the exponential function in the IEEE 754r decimal64 format, un article écrit il y a déjà deux ans avec Damien Stehlé and Paul Zimmermann, mais qui n'a été publié que cette année dans les Lecture Notes in Computer Science. PostPrint librement disponible sur HAL.
MPFR 2.4.0 Release Candidate is available.
Le service InriaGforge va migrer le 4 décembre. Ceci affectera le dépôt Subversion de MPFR (mais pas le site web mpfr.org, ni la liste de diffusion de MPFR, qui sont hébergés ailleurs).
J'ai ajouté un petit programme C de test de l'effet de la contraction en FMA sur mes pages d'arithmétique des ordinateurs. Il montre que sous certaines conditions, on peut avoir des expressions du style 1.1 × 1.1 - 1.1 × 1.1 dont l'évaluation ne donne pas 0, ce qui peut donner des bugs subtiles, notamment si le résultat est un nombre négatif et qu'on en prend la racine carrée...
Sur un sujet similaire (mais seulement sur des expressions constantes et sans exemple d'échec en pratique), voir le Defect Report #300.
La bibliothèque MPFR 2.3.2 est sortie. Les changements par rapport à la version 2.3.1:
Corrections de bugs; voir la page de MPFR 2.3.1.
Amélioration du manuel de MPFR.
Le comportement de mpfr_check_range
a changé: si la valeur est un infini inexact, le drapeau overflow est positionné (au cas où il aurait été perdu).
La fonction mpfr_init_gmp_rand
(définie seulement lorsque MPFR est compilée sans l'option de configure --with-gmp-build) n'est plus du tout définie. Cette fonction était privée et non documentée, et n'était utilisée que dans la suite de tests de MPFR. Du code utilisateur qui l'appellerait est considéré comme incorrect et peut échouer en conséquence. Faire tourner l'ancienne suite de tests sur MPFR 2.3.2 peut aussi échouer.
Le comité de révision des normes IEEE (RevCom) a approuvé P754 (révision de la norme IEEE 754) à l'unanimité, qui a ensuite été approuvée par le IEEE-SA Standards Board le 12 juin 2008.
Appel à communications pour Arith'19 (19th IEEE Symposium on Computer Arithmetic). Date limite: 2008-10-15. Conférence: 8-10 juin 2009, Portland, Oregon, USA.
Le patch 1 de MPFR 2.3.1 est disponible dans la section bugs de la page de MPFR 2.3.1. Il corrige un bug dans le test de configure concernant les threads (activé lorsque l'option --enable-thread-safe est donnée): ce test échoue systématiquement quand le répertoire objet (build) est différent du répertoire source. Notez que si vous avez déjà pu compiler MPFR 2.3.1, alors vous n'avez pas besoin de ce patch.
La bibliothèque MPFR 2.3.1 est sortie. Les changements par rapport à la version 2.3.0:
Changements dans le comportement de mpfr_strtofr
et dans sa documentation concernant des cas particuliers où le code et la documentation ne correspondaient pas.
Corrections de bugs; voir la page de MPFR 2.3.0.
Test de configuration pour le support TLS.
Amélioration du manuel de MPFR.
MPFR 2.3.1 Release Candidate 2 is available.
MPFR 2.3.1 Release Candidate is available.
GNU C library (glibc): printf
doesn't take the rounding mode into account opened on 2007-09-19.
Perl: floating-point binary-decimal conversion bugs opened on 2007-11-19.
Debian / GNU C library (glibc): libc6: strtod("-0", 0)
returns +0.0 instead of -0.0 fixed in Debian on 2007-11-23.
Debian / zsh: zsh: printf %g -0
outputs 0 instead of -0 fixed in Debian on 2007-11-25.
FreeBSD: output of long double subnormals (with printf
) is wrong by a factor 2 fixed in HEAD on 2007-12-09.
Une courte note sur les prochains événements liés à l'arithmétique des ordinateurs.
Séminaire Dagstuhl 08021: Numerical Validation in Current Hardware Architectures, 6-11 janvier 2008.
8e conférence sur les nombres réels et ordinateurs (RNC8), 7-9 juillet 2008, Saint-Jacques-de-Compostelle, Espagne. Date limite de soumission: 8 février 2008 22 février 2008 (date limite étendue).
First challenge in the forecast of solar power, compétition amicale dans le cadre de RNC8.
2es Rencontres Arithmétique de l'Informatique Mathématique (RAIM) du GDR Informatique Mathématique, 3-5 juin 2008, Lille.
Les patches 1 à 4 sont disponibles dans la section bugs de la page de MPFR 2.3.0.
Le premier patch est nécessaire quand le répertoire de compilation est différent du répertoire source. Le deuxième patch corrige un échec d'assertion dans mpfr_acosh
sur des arguments légèrement plus grands que 1 (ce bug ne peut se produire que si la précision de la destination est strictement inférieure à la précision de l'argument d'entrée), mais je ne suis pas sûr de l'analyse d'erreur; un meilleur patch sera publié plus tard. Le troisième patch corrige un bug important dans mpfr_atan2
, qui se produit lorsque le drapeau underflow est positionné avant l'appel de la fonction. Le quatrième patch corrige divers bugs dans mpfr_subnormalize
.
Un bug dans Microsoft Excel 2007 a récemment été découvert, qui a pour effet de donner 100 000 au lieu de 65 535 et 100 001 au lieu de 65 536 après certains calculs. Il s'agit en fait uniquement d'un bug d'affichage, dû à une conversion incorrecte de la base 2 vers la base 10 (la valeur stockée en interne est correcte). Détails au sujet de ce bug sur le blog consacré à Microsoft Excel.
Rappelons que Microsoft Excel avait déjà eu dans le passé un bug similaire, mais lors de l'entrée d'un nombre (conversion incorrecte de la base 10 vers la base 2) au lieu de l'affichage: taper 1,40737488355328 dans Excel 3.0 à 7.0 donnait 0,64 (cf aussi support de Microsoft et via Google).
Des puissances de deux interviennent dans les deux cas: 65536 = 216 et 1,40737488355328 = 247 / 1014.
Après la découverte de ce nouveau bug, certains se sont empressés de dire qu'il faut passer à OpenOffice. Mais OpenOffice a lui aussi ses problèmes, comme le fait d'essayer de corriger les erreurs d'arrondi, qui peut donner des résultats surprenants et cacher des bugs côté utilisateur (cf discussion [CALC] Calculs imprécis sur la liste users-fr). Ceci dit, je ne sais pas si Excel fait le même genre de choses. Il y a des raisons de passer à OpenOffice, mais elles sont tout autres.
La bibliothèque MPFR 2.3.0 est sortie. Les principaux changements par rapport aux versions 2.2.*:
Le fichier mpfr.info est maintenant installé dans le sous-répertoire share (comme requis par le Filesystem Hierarchy Standard); voir la sortie de ./configure --help.
La bibliothèque partagée est maintenant activée par défaut. Si la construction de MPFR échoue sur votre plateforme, essayez l'option --disable-shared de configure pour désactiver la bibliothèque partagée.
Support thread-safe pour le compilateur Visual de Microsoft.
Nouvelles fonctions mpfr_j0
, mpfr_j1
, mpfr_jn
, mpfr_y0
, mpfr_y1
, mpfr_yn
, mpfr_lgamma
, mpfr_remainder
, mpfr_remquo
, mpfr_fms
, mpfr_signbit
, mpfr_setsign
, mpfr_copysign
, mpfr_get_patches
.
Amélioration des fonctions mpfr_sin
, mpfr_cos
et mpfr_sin_cos
(réduction d'argument).
Manuel de MPFR plus détaillé.
Amélioration des tests (make check).
Correction de bugs.
MPFR 2.3.0 Release Candidate 2 is available.
Une école CEA-EDF-INRIA sur le thème du calcul numérique certifié aura lieu au Loria (Nancy) les 25 et 26 octobre 2007.
Le but de cette école est de sensibiliser aux problèmes posés par les calculs numériques via l'utilisation d'arithmétique flottante (erreur d'arrondi, précision limitée, débordement de capacité, etc.) et de proposer quelques outils innovants sur ce thème, avec en particulier une formation à la bibliothèque MPFR de calcul flottant en précision arbitraire.
Public visé: ingénieurs ou chercheurs, du domaine public ou privé. Attention! Le nombre de participants est limité.
Mes papiers les plus récents:
Worst cases of a periodic function for large arguments, écrit avec Guillaume Hanrot, Damien Stehlé et Paul Zimmermann. À paraître dans les actes d'Arith-18 en juin 2007.
Résumé: Cet article étudie le problème de trouver les cas difficiles de l'arrondi d'une fonction périodique sur de grands opérandes flottants. Plus précisément, on s'intéresse à des opérandes de taille telle que l'approximation polynomiale locale n'a plus d'intérêt. Il s'agit d'un des derniers obstacles à l'objectif de garantir le calcul efficace de fonctions transcendantes avec arrondi correct, sur l'ensemble du domaine couvert par la norme IEEE-754. Nous présentons le premier algorithme non naïf pour ce problème, de complexité heuristique O(20.676 p) pour une précision de p bits. Nous montrons l'efficacité de l'algorithme sur la plus grande binade en double précision IEEE-754 pour la fonction sinus, et donnons certains mauvais cas correspondants. Nous espérons que la totalité des pires cas des fonctions trigonométriques sur l'ensemble de leur domaine pourront être trouvés dans les prochaines années, tâche qui semblait hors de portée jusqu'à présent.
Some notes on the possible under/overflow of the most common elementary functions, écrit avec Jean-Michel Muller. Mai 2007.
Résumé: The purpose of this short note is not to describe when underflow or overflow must be signalled (it is quite clear that the rules are the same as for the basic arithmetic operations). We just want to show that for some of the most common functions and floating-point formats, in many cases, we can know in advance that the results will always lie in the range of the numbers that are representable by normal floating-point numbers, so that in these cases there is no need to worry about underflow or overflow. Note that when it is not the case, an implementation is still possible using a run-time test.
Computing integer powers in floating-point arithmetic, écrit avec Peter Kornerup et Jean-Michel Muller. Mai 2007.
Résumé: We introduce two algorithms for accurately evaluating powers to a positive integer in floating-point arithmetic, assuming a fused multiply-add (fma) instruction is available. We show that our log-time algorithm always produce faithfully-rounded results, discuss the possibility of getting correctly rounded results, and show that results correctly rounded in double precision can be obtained if extended-precision is available with the possibility to round into double precision (with a single rounding).
ARITH18 - 18e conférence IEEE sur l'arithmétique des ordinateurs, 25-27 juin 2007, Montpellier, France. Date limite d'inscription à prix réduit: 25 mai 2007.
Bien sûr, j'y serai!
J'ai ajouté une nouvelle catégorie: Lyon, au sujet de la ville de Lyon (événements...). Quatre anciens billets ont été classés dans cette catégorie.
Note: il n'est pas encore possible d'effectuer du filtrage par catégorie au niveau du serveur, mais ça viendra peut-être un jour...
Les patches 2 à 5 sont disponibles dans la section bugs de la page de MPFR 2.2.1. Les trois premiers corrigent divers problèmes liés aux exceptions, et le patch 5 met à jour le manuel de MPFR: le répertoire d'installation par défaut du fichier info a changé et ce patch le met à jour dans le manuel, et il ajoute une nouvelle section Exceptions et la description manquante de la fonction mpfr_dim
(qui a été ajoutée dans MPFR 2.0.1).
Les changements de MPFR 2.2.0 à 2.2.1 ne mentionnaient pas le changement suivant:
Le fichier mpfr.info est maintenant installé dans le sous-répertoire share (comme requis par le Filesystem Hierarchy Standard); voir la sortie de ./configure --help.
J'ai mis à jour la page web de MPFR, les fichiers NEWS et corrigé les fichiers mpfr.texi (à la fois dans le tronc et dans la branche 2.2). Les utilisateurs devraient s'assurer que leur variable d'environnement INFOPATH a une valeur correcte, e.g. /usr/local/share/info:/usr/local/info (dans cet ordre, au cas où de vieux fichiers resteraient dans /usr/local/info).
C'était un changement dans autoconf 2.59c (plus d'information dans le fichier NEWS d'autoconf).
Comme cela a été demandé, les patches fournis pour MPFR modifient maintenant la chaîne de version en y ajoutant un suffixe (-p1, -p2, et ainsi de suite), de manière à ce qu'on puisse savoir quels patches ont été appliqués. Pour des raisons pratiques, tous les fichiers où la version apparaît ne sont pas patchés, mais la chaîne de version mise à jour est disponible avec la macro MPFR_VERSION_STRING
(fichier d'en-tête mpfr.h) et la fonction mpfr_get_version
(bibliothèque).
Le patch 1 est disponible dans la section bugs de la page de MPFR 2.2.1. Il ajoute la macro mpfr_init_set_ld
, qui est documentée dans le manuel de MPFR.
L'École Jeunes Chercheurs Informatique Mathématique (ex École Jeunes Chercheurs en Algorithmique et Calcul Formel) se tiendra cette année à Nancy, au LORIA, du 19 au 23 mars 2007. Date limite d'inscription et de soumission d'un exposé: 2 mars 2007.
Les présentations des Rencontres Arithmétique de l'Informatique Mathématique (qui ont eu lieu à Montpellier les 22-25 janvier) sont maintenant disponibles.
INT_MIN
% -1
C'est un bug de GCC apparemment connu depuis longtemps, mais il vient seulement d'être rapporté sur le BTS de GCC (bug 30484), suite à une discussion sur ce sujet dans la liste de diffusion de développement de GCC. Selon la norme C ISO,
a la valeur 0, mais j'obtiens les résultats suivants sur mes diverses machines:INT_MIN
% -1
Exception virgule flottante sous Linux/x86, avec gcc 4.1.2 (prerelease).
2147483647 sous Linux/PowerPC (G4), avec gcc 4.1.2 (prerelease).
-2147483648 sous Mac OS X PowerPC G5, avec gcc 4.0.1 d'Apple (Xcode 2.4.1).
Mais sur mon Zaurus (Linux/ARM), j'obtiens la valeur correcte 0. J'ai utilisé le programme suivant:
#include <limits.h> #include <stdio.h> int main (void) { volatile int i = INT_MIN, j = -1; printf ("%d\n", i % j); return 0; }
Quand on obtient un comportement incorrect en C, c'est pareil avec Perl, en utilisant le script suivant:
#!/usr/bin/env perl use integer; $x = -2147483648; $y = -1; print "$x % $y = ", $x % $y, "\n";
Si quelqu'un a un véritable code qui peut échouer à cause de ce bug, qu'il le signale! Pour MPFR, on avait été confronté à des bugs sur d'autres cas particuliers (e.g. sur 0 +
, LONG_MIN
et LONG_MIN
/ 1
).LONG_MIN
/ (-2)
Nouvelle page: mon analyse du bug Debian 153548 dans la glibc. J'y explique pourquoi seules quelques valeurs sont (complètement) fausses.
La bibliothèque MPFR 2.2.1 est sortie. Les principaux changements par rapport à la version 2.2.0:
Nombreuses corrections de bugs (voir la page de MPFR 2.2.0 pour la liste).
Mise à jour du mpfr-longlong.h à partir du fichier longlong.h de GMP 4.2.
Déplacement de certaines déclarations internes de mpfr.h à mpfr-impl.h.
Utilisation de -search_paths_first sur Darwin (Mac OS X) pour corriger le comportement à l'édition de liens.
Amélioration du make check: tests génériques beaucoup plus complets.
Amélioration du fichier INSTALL et du manuel de MPFR.
Après 17 ans, le livre Arithmétique des ordinateurs de Jean-Michel Muller est maintenant en libre accès, sous forme de pages scannées (Jean-Michel ayant utilisé à l'époque un logiciel de traitement de texte propriétaire au lieu de TeX).
Le patch 16 est disponible sur la page de MPFR 2.2.0. Il corrige l'échec du test texp2.
Le patch 15 est disponible sur la page de MPFR 2.2.0. Il corrige plusieurs bugs, principalement liés à des cas particuliers, exceptions et flags globaux.
Les patches 13 et 14 sont disponibles sur la page de MPFR 2.2.0. Ils corrigent des problèmes concernant les chemins vers les fichiers d'en-têtes et de bibliothèques (include paths / library paths).
Les patches 11 et 12 sont disponibles sur la page de MPFR 2.2.0. Ils corrigent divers problèmes avec la division et avec la fonction mpfr_get_f
.
De plus, des répertoires peuvent être ajoutés dans un ordre incohérent à CPPFLAGS et LDFLAGS, ce qui peut produire une bibliothèque incorrecte dans certains cas. Ce problème est corrigé dans le dépôt Subversion. Mais vous pouvez toujours obtenir un avertissement (warning) disant que gmp.h et libgmp semblent avoir des versions différentes ou que vous ne pouvez pas exécuter un programme lié avec GMP. Le test n'est pas assez fiable en pratique et l'avertissement peut être confus; par conséquent, the code lié à ce test doit être changé ou retiré. Cependant la bibliothèque MPFR devrait toujours être construite correctement.
J'ai écrit un petit module Perl qui fournit une interface Perl à Maple et masque la plupart des problèmes avec Maple que j'ai pu rencontrer. Il est disponible depuis ma page Maple, qui donne quelques explications.
Une compétition amicale de logiciels à arithmétique réelle exacte aura lieu à Nancy pendant la conférence RNC7. Le but est de mesurer les performances de divers paquets de calcul numérique sur un ensemble de défis, avec l'accent mis surtout sur la précision des résultats. Tous les paquets capables de faire de la précision arbitraire sont les bienvenus pour la compétition...
Le site web de MPFR sera indisponible à partir de 2006-04-20 16:00 UTC pendant quelques heures, à cause d'une mise à jour du réseau où le site web est hébergé (Loria). Le site web du projet sur InriaGforge et le dépôt Subversion ne sont pas concernés par cette coupure réseau.
J'ai ajouté une nouvelle page sur Maple. Pour le moment, elle ne contient qu'une section sur comment utiliser Maple avec le langage Perl sous Unix (Linux ou Solaris), en utilisant soit des pipes, soit un pseudo-terminal (pty).
Cela date d'une semaine, mais j'ai oublié de l'annoncer ici... Le patch 9 est disponible sur la page de MPFR 2.2.0. Il corrige un petit bug dans la fonction mpfr_random2
. En pratique, ce bug n'a probablement aucun effet.
Le patch 8 est disponible sur la page de MPFR 2.2.0. Il corrige des bugs dans les fonctions mpfr_get_f
et mpfr_set_f
de conversion avec la couche mpf de GMP: mpfr_get_f
donne une mauvaise valeur quand le résultat a un exposant négatif et mpfr_set_f
ne supporte pas les overflows. Si vous n'utilisez pas mpf, ce patch vous sera probablement inutile.
Une page web Recrutements sur des postes scientifiques au Loria a été ouverte.
Le patch 7 est disponible sur la page de MPFR 2.2.0. Il corrige un bug d'arrondi dans la fonction mpfr_sin
pour certains pires cas (comme ceux utilisés pour tester la bibliothèque standard C).
Le patch 6 est disponible sur la page de MPFR 2.2.0. Il corrige un important problème d'efficacité dans mpfr_div
lorsque le diviseur a une précision bien plus petite que celle du dividende; ce problème a été introduit lors de la réécriture du code de la division pour MPFR 2.2.0, si bien que les versions précédentes de MPFR ne sont pas affectées.
J'ai reçu la médaille du Loria, avec les autres membres de l'équipe MPFR, pour avoir gagné la compétition amicale Many Digits.
Nous venons de publier un rapport de recherche sur MPFR (lien sur HAL).
Le patch 5 pour MPFR 2.2.0 est disponible. Ce patch corrige divers problèmes (voir la page web pour les détails).
Une nouvelle version de MPFI (1.3.4-RC1) est disponible. C'est la première version à supporter MPFR 2.2.0. Merci Fabrice pour cette mise à jour!
L'ancien dépôt CVS de MPFR est fermé. La bibliothèque MPFR est maintenant hébergée sur InriaGforge. Dans le même temps, le dépôt a été converti à Subversion.
Voir les informations concernant InriaGforge, MPFR et Subversion sur le site web de MPFR.
Page du projet DPE ([Mise à jour du 2022-10-08] Nouvelle URL sur GitLab Inria, puisque InriaForge a été fermée).
La bibliothèque DPE fournit des nombres à virgule flottante avec de grands exposants. Un nombre DPE est représenté par une paire (d, e), où d est un flottant dans [1/2, 1[, et e est l'exposant correspondant (type int), représentant d × 2e.
DPE est développée par Patrick Pélissier et Paul Zimmermann dans le projet SPACES (Loria / INRIA Lorraine).
L'équipe MPFR, dont je fais partie, a gagné la compétition amicale Many Digits, qui s'est déroulée les 3 et 4 octobre 2005 à l'Université Radboud de Nimègue (Pays-Bas).
Les résultats et les temps et classements finaux détaillés.
Pour le problème 20, la formule donnant cos(π/17), que je connaissais car étant dans ma liste de 17, a été très utile. J'étais aussi intéressé par le problème 17, pour lequel j'ai pu passer de N = 4 à N = 5 en hackant la fonction zeta_ui
écrite par Paul, pour calculer ζ(3) et ζ(5) en même temps et éviter ainsi de faire certains calculs identiques en double.
Pour les utilisateurs de Darwin (Mac OS X) souhaitant construire une bibliothèque dynamique, un nouveau patch est disponible sur la page de MPFR 2.2.0. Au moment de la sortie de MPFR 2.2.0, il y avait un bug dans la libtool utilisée pour générer le script configure de MPFR, empêchant la création de bibliothèques partagées sur Darwin. Ce script peut être corrigé par ce patch (merci à Dave Morrison); alternativement, les utilisateurs peuvent exécuter autoreconf s'ils ont les outils nécessaires.
Les utilisateurs de l'arbre CVS ne sont pas affectés par ce problème puisqu'ils doivent exécuter ces outils sur leur propre machine.
Deux patches sont disponibles sur la page de MPFR 2.2.0.
Le paquet Debian libmpfr-dev 2.2.0.dfsg.1-1 a été téléchargé; il contient ces deux patches, mais ne contient plus la documentation à cause de la politique de Debian concernant la licence de la documentation.
Sous Linux/x86, comme d'autres JVM, la Kaffe Virtual Machine calculait de manière interne en précision étendue, alors que ce n'est pas admis par les spécifications de Java. Ce problème a été corrigé dans le paquet Debian 1.1.6-2 (je ne sais rien concernant les autres distributions Linux).
Pour plus d'information sur ce bug et les problèmes liés à la précision étendue sous Linux/x86, veuillez voir ma page Linux et la précision étendue sur les processeurs x86. Je viens aussi d'y ajouter une référence sur mon papier The Euclidean division implemented with a floating-point division and a floor, qui donne un exemple particulièrement utile pour des programmes écrits en ECMAScript (souvent mentionné en tant que Javascript) ou utilisant XPath.
La bibliothèque MPFR 2.2.0 est sortie. Les principaux changements par rapport aux versions 2.1.*:
Correction de bugs.
Nouvelles fonctions: mpfr_set_overflow
, mpfr_set_underflow
, mpfr_set_inexflag
, mpfr_set_erangeflag
, mpfr_set_nanflag
, mpfr_erfc
, mpfr_atan2
, mpfr_pow_z
, mpfr_subnormalize
, mpfr_const_catalan
, mpfr_sec
, mpfr_csc
, mpfr_cot
, mpfr_root
, mpfr_eint
, mpfr_get_f
, mpfr_sech
, mpfr_csch
, mpfr_coth
, mpfr_lngamma
.
Nouvelle macro: MPFR_VERSION_STRING
.
Les variables exportées de MPFR ont été retirées de mpfr.h (elles n'étaient pas documentées, donc les programmes respectant l'API fonctionnent toujours).
Les fonctions mathématiques sont plus rapides (en moyenne et au pire).
Meilleur support pour le type long double.
Support bibliothèque partagée.
Fonctionne avec les threads (si la bibliothèque a été construite avec l'option --enable-thread-safe de configure).
Possibilité de tracer MPFR (journaux).
Changement de la sémantique de mpfr_out_str
et mpfr_get_str
quand le paramètre indiquant le nombre de chiffres vaut 0.
Meilleur support des locales.
La compatibilité binaire avec les versions précédentes est préservée si vous n'utilisez pas de fonctionnalités non documentées.
Les présentations à Arith'17 sont disponibles sur le site web de la conférence et sur ce miroir.
La bibliothèque MPFR 2.1.2 est sortie. Il s'agit d'une version de corrections de bugs, incluant les 12 patches de la version 2.1.1.
Vous pouvez la télécharger dans l'un des trois formats d'archive suivants:
mpfr-2.1.2.tar.bz2 (signature, MD5: 4e2b64fe2263d093bd809820221289a8),
mpfr-2.1.2.tar.gz (signature, MD5: d3bf773894478bf71af87f681b6819a1),
mpfr-2.1.2.zip (signature, MD5: 2f29793940d782e313d4eb8ba2f30e8d).
Cette nouvelle version apparaîtra bientôt comme paquet Debian.
Many Digits
Une compétition amicale/session de benchmark pour examiner l'état de l'art dans les diverses implémentations d'arithmétique réelle exacte se tiendra à l'Université de Radboud, Nijmegen, Pays-Bas, le 4 octobre 2005.
Tous les logiciels interactifs capables de manipuler les fonctions élémentaires en précision arbitraire sont invités à participer. De plus, toutes les bibliothèques de calcul en précision arbitraire dans n'importe quel langage de programmation sont les bienvenus pourvu que le participant écrive un programme/interface approprié.
Une participation à distance est possible. Voir l'appel à participation (date limite d'enregistrement: 26 août).
Les pages d'index du blog sont maintenant réduites à 15 billets. L'ensemble des billets est maintenant disponible sur une nouvelle page. De nouvelles améliorations viendront plus tard...
Un nouveau patch est disponible sur la page de MPFR 2.1.1. Il corrige un bug pouvant se produire avec certaines locales, e.g. avec la locale turque tr_TR.ISO8859-9, où les caractères ASCII I et i ne correspondent pas (la version minuscule de I est le i sans point).
J'ai découvert ce bug après avoir lu un fichier de développement de Mutt, où des problèmes similaires peuvent se produire si les développeurs ne font pas attention. Comme souvent, en faisant les tests, j'ai découvert un autre bug, dans zsh.
Trois nouveaux patches (depuis le 2005-05-12) sont disponibles sur la page de MPFR 2.1.1.
Depuis ces derniers mois:
[Mars] Test de fonctions mathématiques de la bibliothèque standard C: deux nouvelles fonctions testées (cube et racine cubique).
[Mai] Linux/86 et la précision étendue: mises à jour diverses.
[Juin] Mes transparents pour la conférence Arith'17 sont disponibles.
Annonces diverses que j'ai reçues dans ma boîte-aux-lettres...
2005-06-15: Call For Papers Real Numbers, special issue of Theoretical Informatics and Applications (dead-line postponed to June 15).
2005-09-01: Call For Papers More Accurate Computation: Methods and Software at SAC 2006.
J'ai écrit une page sur les résultats de la recherche de pires cas (pour le dilemme du fabricant de tables) de la fonction 2x en précision étendue x86 (64 bits de mantisse), entre 1/2 et 1.
Un nouveau patch est disponible sur la page de MPFR 2.1.1. Il corrige un bug dans la fonction mpfr_div_ui
.
Quatre nouveaux patches (depuis le 2005-03-09) sont disponibles sur la page de MPFR 2.1.1.
À cause d'une coupure de courant au niveau du Loria, le site web de MPFR est indisponible jusqu'au 20 avril, à environ 07:30 UTC (09:30 heure française). Les courriers électroniques à destination du Loria ne seront pas perdus ni rejetés, mais ne pourront pas être lus avant la remise en route des serveurs.
Les transparents de ma présentation aux journées Arinews des 7-8 mars 2005 sont disponibles sur ma page recherche.
Un rapport de recherche donnant plus de détails est en cours d'écriture. Le résumé:
Nous étudions des conditions sous lesquelles la division euclidienne peut être implémentée à l'aide d'une division flottante suivie d'une fonction
floor
. Nous montrons qu'avec des hypothèses raisonnables, le mode d'arrondi vers le bas peut toujours être utilisé, et que le mode d'arrondi au plus près peut être utilisé dans la plupart des cas usuels. Ces résultats peuvent être utiles pour n'importe quel langage, mais surtout pour les langages, comme ECMAScript, qui n'ont pas de division entière et qui arrondissent toujours au plus près.
Deux patches sont disponibles sur la page de MPFR 2.1.1. Ils ont été appliqués dans le paquet Debian libmpfr-dev 2.1.1-2.
Sous Linux/x86, comme d'autres JVM, JamVM calculait de manière interne en précision étendue, alors que ce n'est pas admis par les spécifications de Java. Je viens d'apprendre que ce problème a été corrigé dans la version 1.2.1 (2004-12-02). À ma connaissance, il s'agit de la deuxième JVM libre à être corrigée et à calculer maintenant correctement.
Pour plus d'information sur ce bug et les problèmes liés à la précision étendue sous Linux/x86, veuillez voir ma page Linux et la précision étendue sur les processeurs x86.
La bibliothèque MPFR 2.1.1 est sortie. Il s'agit d'une version de corrections de bugs, incluant les 17 patches de la version 2.1.0.
Vous pouvez la télécharger dans l'un des trois formats d'archive suivants:
mpfr-2.1.1.tar.bz2 (MD5: 843422d90349800ee721f6710d051c87),
mpfr-2.1.1.tar.gz (MD5: b7eb5932ab86c78d13ed0569ad26af38),
mpfr-2.1.1.zip (MD5: b999dea40758ea5fecf6afb1b65dacf4).
Cette nouvelle version apparaîtra bientôt comme paquet Debian.
J'ai trouvé un nouveau bug dans MPFR 2.1.0: la fonction mpfr_ui_sub
appliquée à l'entier 0 et au nombre flottant +0 donne +0 au lieu de −0; ce bug a été introduit dans MPFR 2.1.0, il n'est donc pas présent dans les versions précécentes. Le patch est disponible sur la page de MPFR 2.1.0.
Trois nouveaux patches sont disponibles sur la page de MPFR 2.1.0.
Annonces diverses que j'ai reçues dans ma boîte-aux-lettres...
2005-03: Journées Arinews les 7 et 8 mars 2005 à l'ENS Lyon, France.
2005-04: École Jeunes Chercheurs en Algorithmique et Calcul Formel, 4-8 avril 2005, Montpellier, France.
2005-07: SNC 2005: International Workshop on Symbolic-Numeric Computation, 19-21 juillet 2005, Xi'an, Chine (conférence satellite d'ISSAC 2005).
2005-09: CASC'2005: The 8th International Workshop on Computer Algebra in Scientific Computing, 12-16 septembre 2005, Kalamata, Grèce. Date limite pour les soumissions: 1er avril 2005.
Possibilité de postdoc, ENS Lyon, France.
Un 13e patch est disponible sur la page de MPFR 2.1.0.
J'ai détecté le bug grâce aux pires cas de la fonction sinus en double précision, dont certains faisaient échouer le nouveau code se trouvant sur le tronc CVS (future version 2.2.0).
12 patches sont disponibles sur la page de MPFR 2.1.0.
Plusieurs plateformes ajoutées sur la page des tests de fonctions mathématiques de la bibliothèque standard C. J'ai aussi ajouté les temps de test pour chaque plateforme (sauf quelques anciennes, qui ne sont plus disponibles).
Je me suis aperçu que l'option -ffloat-store était nécessaire pour gcc 3.4 sous Linux/x86. En effet, les résultats de certaines fonctions de la bibliothèque mathématique sont et restent en précision étendue après affectation. Ce n'est pas conforme à la norme ISO/IEC 9899:1999 (langage C); il s'agit d'un bug de gcc (toutes versions). Cette option est maintenant systématiquement utilisée avec gcc.
J'ai ajouté une nouvelle page sur les formats des versions électroniques de mes publications et transparents. Elle parle de négociation de contenu par HTTP et de problèmes avec le visualiseur postscript/PDF gv, en particulier.
rint
dans la glibc sur PowerPC corrigéLe bug 602 de la glibc powerpc rint()
function is buggy in the rounding toward -inf and +inf modes (fonction rint()
sur PowerPC buggée dans les modes d'arrondi vers -inf et +inf) vient d'être complètement corrigé dans le CVS. Merci!
Ajout de la page Programmes de test de l'arithmétique flottante. J'ai aussi mis à jour tst-ieee754.c car le test des affectations en précision étendue ne montrait plus de bug dans gcc 3.4, probablement à cause d'une nouvelle optimisation liée aux fonctions statiques; le test a été amélioré et le bug est toujours là dans gcc.
Page des tests de fonctions mathématiques de la bibliothèque standard C: j'ai ajouté la machine dixsept.loria.fr (Pentium 4 modèle 3, i.e. Prescott), qui donne les mêmes résultats que les autres processeurs Pentium 4, comme attendu.
La bibliothèque MPFR 2.1.0 est sortie.
Téléchargez-la (MD5: 9174f5e0cd43f2253b5779743368c8f2). MPFR 2.1.0 est aussi disponible en paquet Debian officiel (distribution unstable seulement).
J'ai ajouté les résultats de 5 machines supplémentaires à testdrive.hp.com sur la page des tests de fonctions mathématiques de la bibliothèque standard C:
spe191 (PA-RISC 8800 sous HP-UX).
spe145 (Alpha EV56 sous OSF1 4.0).
spe206 (Alpha EV67 sous OSF1 5.1).
spe176 (Intel Itanium 2 sous HP-UX).
spe189 (AMD Opteron 248 sous GNU/Linux). D'après les résultats, cette machine utilise les fonctions mathématiques (en partie avec arrondi exact) de la bibliothèque glibc.
Voici mon nouveau blog général. Il n'y a pas de sujet particulier, mais pour ceux qui ne sont intéressés que par certains sujets, j'ajouterai des mécanismes de filtrages côté serveur suivant certaines catégories. Vous pouvez déjà faire du filtrage côté client (à l'aide de votre lecteur de flux RSS, ou à l'aide des CSS pour la version web, par exemple).
Mon blog déjà existant sur l'arithmétique des ordinateurs et mes pages recherche est intégré à ce blog général, mais les anciennes URL restent valides et constituent actuellement le seul filtrage au niveau serveur.
Certaines entrées ne seront qu'en français et se retrouveront donc non traduites dans la version anglaise de mon blog; un filtrage sur la langue au niveau serveur est aussi prévu.
Le premier appel à participation à la 6e conférence Real Numbers and Computers (RNC6), du 15 au 17 novembre 2004, Schloß Dagstuhl, Allemagne, se trouve sur le site web de la conférence.
Contenu: introduction, publications, liens vers quelques implémentations des divers algorithmes. La page web...
Plusieurs modifications sur ma page publications:
Mise en place de liens alternatifs.
Négociation HTTP sur le format (postscript ou PDF) à utiliser pour les liens principaux.
Traductions dans la page en français.
À cause d'un bug concernant les pipes sous OpenMosix, mes programmes de recherche de pires cas pour l'arrondi exact (cf introduction au dilemme du fabricant de tables) donnaient parfois des résultats incorrects, non détectables a priori, sur le cluster ble.ens-lyon.fr; j'avais mentionné ce problème dans les transparents de ma présentation lors des journées au vert SPACES 2004. C'était probablement dû à une perte de données lors des communications par pipe entre mes programmes et Maple. Le plus souvent, les pipes (pas seulement dans mes programmes) se bloquaient simplement, sans provoquer de résultats incorrects. Après installation d'une nouvelle version du noyau par les administrateurs système, de nouveaux tests effectués hier ont confirmé que ces problèmes ont complètement disparu.
Déjà il y a plusieurs années, une mémoire défectueuse d'un serveur de fichiers avait provoqué des erreurs dans mes programmes, heureusement détectées. Ce genre d'erreurs se produisant aléatoirement, il faudra vraiment faire tous les tests au moins deux fois, sur des machines différentes.
Sous Linux/x86, comme d'autres JVM, SableVM calculait de manière interne en précision étendue, alors que ce n'est pas admis par les spécifications de Java. Grzegorz B. Prokopski a corrigé ce problème dans le paquet Debian 1.1.6-4 en plaçant le FPU en arrondi double précision (au bon endroit dans le code C). Merci à lui.
À ma connaissance, SableVM est la première implémentation JVM libre à être corrigée et à calculer maintenant correctement.
Pour plus d'information sur ce bug et les problèmes liés à la précision étendue sous Linux/x86, veuillez voir ma page Linux et la précision étendue sur les processeurs x86.
2004-06-30: ajout de la page Linux et la précision étendue sur les processeurs x86.
2004-07-26: ajout des résultats pour le Zaurus SL-C860 sur la page des tests de fonctions mathématiques de la bibliothèque standard C.
2004-08-15: ajout des détails pour chaque machine pour la page des tests de fonctions mathématiques de la bibliothèque standard C.
Voici mon blog sur l'arithmétique des ordinateurs ainsi que l'évolution de mes pages recherche de mon site web. Je ne sais pas encore comment il va évoluer... D'un point de vu technique, il est pour le moment maintenu à l'aide de scripts et de feuilles de styles XSLT. Concernant le contenu, il est possible que je fasse dans le futur un blog plus général, dans lequel il sera intégré (avec filtrage par mots clés). Il devrait être à la fois en français et en anglais.