Certaines des fonctions mathématiques de la bibliothèque standard C ont été testées sur des pires cas pour l'arrondi correct en double précision. Le tableau suivant donne le pourcentage ou le nombre d'arrondis incorrects pour diverses machines, dans le mode d'arrondi au plus près. Les cellules grisées (ou avec des crochets) contiennent un lien vers des explications au bas du tableau. Ce tableau est assez vieux (derniers changements en 2005, 5 ajouts en 2006 et 2 en 2009), mais cela donne une idée du problème.
Fonction | exp |
log |
exp2 |
log2 |
exp10 |
log10 |
sinh |
asinh |
cosh |
acosh |
sin |
asin |
cos |
acos |
tan |
atan |
isq |
isqrt |
cube |
cbrt |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nombre de tests | 2268 | 2813 | 1145 | 929 | 1668 | 1883 | 2215 | 2262 | 2026 | 1877 | 1611 | 1655 | 1576 | 1569 | 1706 | 1735 | 58 | 78 | 150 | 138 |
49 % | 43 % | 52 % | 46 % | 49 % | 100 % | 50 % | 41 % | 100 % | 49 % | 100 % | 83 % | 100 % | 100 % | 55 % | 51 % | |||||
49 % | 43 % | 48 % | 45 % | 52 % | 46 % | 49 % | 52 % | 50 % | 41 % | 51 % | 49 % | 49 % | 83 % | 52 % | 50 % | 55 % | 51 % | 53 % | 43 % | |
49 % | 43 % | 48 % | 45 % | 52 % | 46 % | 52 % | 52 % | 50 % | 41 % | 51 % | 49 % | 49 % | 83 % | 52 % | 50 % | 55 % | 51 % | 53 % | 43 % | |
49 % | 43 % | 46 % | 51 % | 49 % | 46 % | 49 % | 51 % | 50 % | 49 % | 50 % | 52 % | 50 % | 53 % | 51 % | 51 % | 58 % | ||||
49 % | 43 % | 46 % | 51 % | 82 % | 46 % | 86 % | 51 % | 51 % | 49 % | 95 % | 52 % | 50 % | 53 % | 51 % | ||||||
49 % | 43 % | 46 % | 51 % | 50 % | 46 % | 50 % | 51 % | 51 % | 49 % | 95 % | 52 % | 50 % | 53 % | 51 % | 51 % | 58 % | ||||
49 % | 43 % | 48 % | 44 % | 52 % | 47 % | 49 % | 51 % | 50 % | 41 % | 51 % | 49 % | 49 % | 83 % | 52 % | 50 % | 55 % | 51 % | 53 % | 43 % | |
49 % | 42 % | 48 % | 44 % | 52 % | 48 % | 49 % | 50 % | 50 % | 41 % | 51 % | 49 % | 49 % | 83 % | 51 % | 50 % | 55 % | 51 % | 53 % | 43 % | |
49 % | 31 % | 46 % | 29 % | 41 % | 50 % | 50 % | 50 % | 49 % | 49 % | 48 % | 44 % | 50 % | 46 % | 44 % | 41 % | 50 % | 47 % | 58 % | ||
49 % | 30 % | 70 % | 48 % | 51 % | 50 % | 46 % | 48 % | 49 % | 48 % | 45 % | 30 % | 51 % | 51 % | 53 % | 51 % | |||||
49 % | 30 % | 51 % | 50 % | 51 % | 50 % | 46 % | 48 % | 49 % | 48 % | 45 % | 30 % | 51 % | 51 % | 53 % | 51 % | |||||
50 % | 30 % | 48 % | 51 % | 50 % | 47 % | 48 % | 49 % | 47 % | 45 % | 29 % | 51 % | 51 % | 53 % | 51 % | ||||||
50 % | 31 % | 50 % | 47 % | 50 % | 49 % | 54 % | 50 % | 48 % | 49 % | 49 % | 50 % | 50 % | 45 % | 45 % | 43 % | 57 % | ||||
50 % | 31 % | 51 % | 48 % | 51 % | 48 % | 53 % | 49 % | 48 % | 51 % | 49 % | 49 % | 50 % | 55 % | 60 % | 49 % | 58 % | ||||
51 % | 31 % | 47 % | 42 % | 44 % | 47 % | 47 % | 45 % | 51 % | 51 % | 47 % | 50 % | 41 % | 49 % | 46 % | 48 % | 55 % | 45 % | 51 % | ||
51 % | 31 % | 44 % | 47 % | 47 % | 45 % | 51 % | 51 % | 47 % | 50 % | 41 % | 49 % | 46 % | 48 % | 55 % | ||||||
51 % | 31 % | 44 % | 47 % | 47 % | 45 % | 51 % | 51 % | 47 % | 50 % | 41 % | 49 % | 46 % | 48 % | 55 % | 45 % | 51 % | ||||
51 % | 31 % | 44 % | 47 % | 46 % | 45 % | 50 % | 51 % | 47 % | 50 % | 41 % | 49 % | 46 % | 48 % | 55 % | 45 % | 51 % | ||||
51 % | 31 % | 47 % | 42 % | 44 % | 47 % | 46 % | 45 % | 50 % | 51 % | 47 % | 50 % | 41 % | 49 % | 46 % | 48 % | 55 % | 45 % | 51 % | ||
50 % | 30 % | 46 % | 38 % | 50 % | 42 % | 50 % | 50 % | 46 % | 49 % | 48 % | 47 % | 48 % | 29 % | 50 % | 45 % | 48 % | 47 % | |||
50 % | 30 % | 46 % | 38 % | 50 % | 42 % | 50 % | 50 % | 47 % | 49 % | 48 % | 47 % | 48 % | 29 % | 50 % | 45 % | 48 % | 47 % | 49 % | 62 % | |
49 % | 30 % | 52 % | 50 % | 51 % | 50 % | 46 % | 48 % | 49 % | 47 % | 45 % | 28 % | 50 % | 51 % | 53 % | 51 % | |||||
43 % | 52 % | 52 % | 50 % | 66 % | 46 % | 49 % | 50 % | 40 % | 49 % | 51 % | 50 % | 50 % | 41 % | 46 % | 46 % | 55 % | 54 % | 48 % | 46 % | |
47 % | 43 % | 46 % | 46 % | 47 % | 49 % | 46 % | 44 % | 52 % | 49 % | 50 % | 39 % | 49 % | 41 % | 59 % | 49 % | |||||
47 % | 43 % | 46 % | 46 % | 44 % | 49 % | 38 % | 44 % | 52 % | 49 % | 50 % | 39 % | 49 % | 41 % | 59 % | 49 % | 45 % | 43 % | |||
50 % | 30 % | 47 % | 49 % | 51 % | 48 % | 50 % | 50 % | 46 % | 49 % | 49 % | 47 % | 50 % | 29 % | 51 % | 50 % | 57 % | 53 % | 40 % | 58 % | |
42 % | 34 % | 66 % | 45 % | 80 % | 50 % | 48 % | 49 % | 47 % | 50 % | 50 % | 37 % | 50 % | 44 % | 59 % | 59 % | |||||
42 % | 34 % | 51 % | 50 % | 66 % | 45 % | 80 % | 50 % | 48 % | 49 % | 47 % | 50 % | 50 % | 37 % | 50 % | 44 % | 59 % | 59 % | |||
0 | 0 | 51 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 5 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |
0 | 0 | 51 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 5 | 17 % | 0 | 28 % | 0 | 0 | |||
0 | 0 | 51 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 28 % | 0 | 0 | |||
0 | 0 | 51 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 28 % | 0 | 0 | 0 | 62 % | |
0 | 0 | 51 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |
0 | 0 | 52 % | 50 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |
0 | 0 | 52 % | 50 % | 66 % | 48 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |
0 | 5 % | 52 % | 50 % | 66 % | 48 % | 45 % | 50 % | 45 % | 49 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % |
Des résultats plus récents:
Fonction | exp |
log |
expm1 |
log1p |
exp2 |
log2 |
exp10 |
log10 |
sinh |
asinh |
cosh |
acosh |
tanh |
atanh |
sin |
asin |
cos |
acos |
tan |
atan |
isq |
isqrt |
cube |
cbrt |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Nombre de tests | 2268 | 2813 | 7578 | 7550 | 1145 | 929 | 1668 | 1883 | 2215 | 2262 | 2026 | 1877 | 1852 | 1552 | 1611 | 1655 | 1576 | 1569 | 1706 | 1735 | 58 | 78 | 150 | 138 |
49 % | 43 % | 50 % | 52 % | 48 % | 44 % | 52 % | 47 % | 51 % | 50 % | 49 % | 50 % | 52 % | 51 % | 51 % | 49 % | 49 % | 40 % | 52 % | 50 % | 53 % | 51 % | 49 % | 49 % | |
49 % | 43 % | 50 % | 52 % | 48 % | 44 % | 52 % | 47 % | 51 % | 50 % | 49 % | 48 % | 52 % | 51 % | 51 % | 49 % | 49 % | 40 % | 52 % | 50 % | 53 % | 51 % | 49 % | 49 % | |
49 % | 43 % | 44 % | 52 % | 48 % | 50 % | 46 % | 51 % | 50 % | 46 % | 49 % | 50 % | 51 % | 51 % | 49 % | 49 % | 83 % | 52 % | 50 % | 53 % | 47 % | 51 % | 58 % | ||
49 % | 43 % | 44 % | 52 % | 48 % | 45 % | 46 % | 51 % | 50 % | 46 % | 49 % | 50 % | 51 % | 49 % | 49 % | 45 % | 83 % | 51 % | 50 % | 53 % | 51 % | 51 % | 58 % | ||
50 % | 30 % | 44 % | 48 % | 48 % | 37 % | 42 % | 51 % | 50 % | 47 % | 48 % | 50 % | 51 % | 49 % | 47 % | 44 % | 29 % | 51 % | 51 % | 53 % | 47 % | 51 % | 56 % | ||
48 % | 31 % | 47 % | 49 % | 49 % | 30 % | 40 % | 48 % | 50 % | 45 % | 49 % | 46 % | 50 % | 49 % | 52 % | 43 % | 47 % | 51 % | 52 % | 53 % | 63 % | 41 % | 47 % | ||
50 % | 31 % | 44 % | 48 % | 47 % | 51 % | 51 % | 49 % | 50 % | 50 % | 46 % | 49 % | 50 % | 50 % | 49 % | 47 % | 48 % | 29 % | 50 % | 48 % | 57 % | 53 % | 40 % | 43 % | |
50 % | 30 % | 44 % | 48 % | 47 % | 50 % | 51 % | 48 % | 50 % | 50 % | 46 % | 49 % | 50 % | 50 % | 49 % | 47 % | 50 % | 29 % | 51 % | 50 % | 57 % | 53 % | 40 % | 43 % | |
50 % | 30 % | 44 % | 48 % | 47 % | 49 % | 51 % | 48 % | 50 % | 50 % | 46 % | 49 % | 50 % | 50 % | 49 % | 47 % | 47 % | 29 % | 50 % | 48 % | 57 % | 53 % | 40 % | 43 % | |
49 % | 31 % | 43 % | 51 % | 0 | 0 | 41 % | 50 % | 50 % | 46 % | 54 % | 50 % | 50 % | 49 % | 48 % | 44 % | 25 % | 46 % | 44 % | 52 % | 53 % | 50 % | 58 % | ||
51 % | 29 % | 44 % | 48 % | 52 % | 50 % | 50 % | 47 % | 51 % | 50 % | 46 % | 49 % | 50 % | 51 % | 47 % | 0 | 44 % | 17 % | 0 | 0 | 47 % | 50 % | 53 % | 62 % | |
51 % | 29 % | 44 % | 48 % | 51 % | 50 % | 50 % | 47 % | 51 % | 50 % | 46 % | 49 % | 50 % | 51 % | 47 % | 0 | 44 % | 17 % | 0 | 0 | 47 % | 50 % | 53 % | 62 % | |
50 % | 29 % | 44 % | 48 % | 51 % | 50 % | 50 % | 47 % | 51 % | 50 % | 46 % | 49 % | 50 % | 51 % | 47 % | 0 | 44 % | 17 % | 0 | 0 | 50 % | 44 % | 55 % | 62 % | |
50 % | 28 % | 44 % | 48 % | 49 % | 37 % | 50 % | 47 % | 51 % | 50 % | 47 % | 49 % | 50 % | 51 % | 47 % | 52 % | 44 % | 29 % | 46 % | 44 % | 60 % | 46 % | 47 % | 62 % | |
50 % | 28 % | 44 % | 48 % | 49 % | 37 % | 50 % | 47 % | 51 % | 50 % | 47 % | 49 % | 50 % | 51 % | 47 % | 0 | 44 % | 17 % | 0 | 0 | 60 % | 46 % | 47 % | 62 % | |
49 % | 27 % | 44 % | 48 % | 49 % | 37 % | 50 % | 47 % | 51 % | 50 % | 47 % | 49 % | 50 % | 51 % | 47 % | 0 | 44 % | 17 % | 0 | 0 | 50 % | 42 % | 51 % | 62 % | |
0 | 26 % | 44 % | 48 % | 52 % | 50 % | 50 % | 47 % | 45 % | 50 % | 45 % | 49 % | 50 % | 51 % | 0 | 0 | 0 | 17 % | 0 | 2 % | 0 | 0 | 32 % | 62 % | |
22 | 26 % | 44 % | 48 % | 52 % | 50 % | 50 % | 47 % | 45 % | 50 % | 45 % | 49 % | 50 % | 51 % | 0 | 0 | 0 | 17 % | 0 | 2 % | 0 | 0 | 0 | 62 % | |
0 | 0 | 44 % | 48 % | 66 % | 47 % | 45 % | 50 % | 45 % | 49 % | 50 % | 51 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |||
0 | 0 | 44 % | 48 % | 52 % | 50 % | 50 % | 47 % | 45 % | 50 % | 45 % | 49 % | 50 % | 51 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % | |
0 | 0 | 44 % | 48 % | 51 % | 50 % | 50 % | 47 % | 45 % | 50 % | 45 % | 49 % | 50 % | 51 % | 0 | 0 | 0 | 17 % | 0 | 0 | 0 | 0 | 0 | 62 % |
Notes:
Avec gcc 3.4 sous Linux/x86, l'option -ffloat-store est nécessaire, car 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.
Le temps des tests sur les pires cas est donné pour certaines plateformes. Il est élevé pour les implémentations qui renvoient un arrondi correct, mais vous devez vous rappeler qu'en pratique, la probabilité de rencontrer de tels pires cas est très faible.
Distribution:
Programmes de test pour les fonctions C natives et la bibliothèque GNU MPFR. Ces programmes prennent une liste de tests (généralement correspondant à des cas difficiles à arrondir correctement) en entrée, comme ceux donnés ci-dessous.
Pires cas utilisés pour les tests ci-dessus (775 Ko). Dernière mise à jour le 2020-11-27, avec l'ajout de 4 fonctions.
Note
Certains pires cas
listés ne sont en fait pas de véritables pires cas. Cela vient d'une ancienne version de mon script de filtrage: tout pire cas de y = f(x), où x est une valeur avec une précision de 54 bits (i.e., un nombre machine ou le milieu de deux nombres machine consécutifs) et y est très proche d'un nombre machine, générait systématiquement un pire cas pour la fonction réciproque f−1, alors que si la dérivée logarithmique de f est très grande, ce n'est pas forcément un véritable pire cas pour la réciproque. J'ai corrigé le script en 2007, mais je n'ai pas modifié la base de valeurs dans ce fichier, car toutes les machines listées dans les tableaux ci-dessus doivent être testées sur les mêmes valeurs (je n'avais plus à ma disposition certaines machines pour pouvoir refaire les tests avec une nouvelle base de valeurs); les seuls changements que je faisais dans ce fichier étaient l'ajout de nouvelles fonctions.
Répertoire contenant des pires cas supplémentaires. Ce ne sont pas tous les cas difficiles à arrondir que j'ai trouvés, mais il y a au moins les plus importants. Les nombres dénormalisés ont été ignorés (de toute façon, ce sont des cas particuliers), comme si en sortie, on avait une plage d'exposants infinie.
Mes publications:
Vincent Lefèvre, Jean-Michel Muller et Arnaud Tisserand. Towards Correctly Rounded Transcendentals, Proceedings of the 13th IEEE Symposium on Computer Arithmetic (ARITH-13), 1997. [PDF]
Vincent Lefèvre, Jean-Michel Muller et Arnaud Tisserand. Toward Correctly Rounded Transcendentals, IEEE Transactions on Computers, novembre 1998. [PDF]
Vincent Lefèvre. An Algorithm that Computes a Lower Bound on the Distance Between a Segment and ℤ², Developments in Reliable Computing, 1999.
Vincent Lefèvre. Moyens arithmétiques pour un calcul fiable, thèse de doctorat de l'École Normale Supérieure de Lyon, janvier 2000.
Vincent Lefèvre et Jean-Michel Muller. Worst Cases for Correct Rounding of the Elementary Functions in Double Precision, Proceedings of the 15th IEEE Symposium on Computer Arithmetic (ARITH-15), 2001. HAL-Inria / HAL / [PDF]
Vincent Lefèvre. New Results on the Distance Between a Segment and ℤ². Application to the Exact Rounding, Proceedings of the 17th IEEE Symposium on Computer Arithmetic (ARITH-17), 2005. HAL-Inria / HAL / [PDF]
Jean-Michel Muller, Nicolas Brisebarre, Florent de Dinechin, Claude-Pierre Jeannerod, Vincent Lefèvre, Guillaume Melquiond, Nathalie Revol, Damien Stehlé et Serge Torres. Handbook of Floating-Point Arithmetic, Birkhäuser Boston, première édition, 2010.
Jean-Michel Muller, Nicolas Brunie, Florent de Dinechin, Claude-Pierre Jeannerod, Mioara Joldes, Vincent Lefèvre, Guillaume Melquiond, Nathalie Revol et Serge Torres. Handbook of Floating-Point Arithmetic, Birkhäuser, Cham, seconde édition, 2018.
La recherche des pires cas pour les tests ci-dessus (hors précalculs et postcalculs) a nécessité 49130 heures de calcul sur un cluster du Centre Charles Hermite (8 machines biprocesseurs), 42129 heures de calcul sur des machines du Laboratoire de l'Informatique du Parallélisme (ENS de Lyon, France), 9333 heures de calcul sur des machines du centre de calcul MEDICIS, et 5767 heures de calcul sur des machines du Loria, dans les années 2000.
Cette page traite seulement de l'arrondi correct. Pour une analyse d'erreur des fonctions mathématiques, vous pouvez voir la page de Gaston H. Gonnet ou MPCHECK (par Paul Zimmermann et Nathalie Revol).