Le « dilemme du fabricant de tables » ou comment calculer juste25/02/04 Certaines idées reçues ont la vie dure, en informatique comme ailleurs. L'une d'entre elles porte sur la fiabilité que l'on attribue au calcul sur ordinateur, par rapport au calcul à la main. Calculer sans l'ombre d'une erreur, un jeu d'enfant pour les ordinateurs ? Pas vraiment !
L'arithmétique virgule flottante
L'erreur est-elle humaine ?De l'implémentation de l'arithmétique dans les programmes ou les circuits à la spécification même des tâches, les sources d'erreur sont multiples. C'est ainsi que la sonde Mars Climate Orbiter s'est écrasée sur Mars en septembre 1999 à cause d'une étourderie ahurissante : une partie des concepteurs des logiciels supposait que l'unité de mesure était le mètre, et l'autre partie que c'était le pied (l'unité anglaise). Souvenons-nous aussi du fameux bug du Pentium Plusieurs modes d'arrondis sont possibles : on peut chercher à fournir le nombre machine le plus proche du résultat exact, (on parle alors d'arrondi au plus près), ou le nombre machine immédiatement inférieur au résultat exact (on parle alors d'arrondi vers -∞), ou le nombre machine immédiatement supérieur au résultat exact (on parle alors d'arrondi vers +∞), ou enfin un arrondi vers zéro. Avant une série d'opérations, un mode d'arrondi est choisi une fois pour toutes, c'est le mode d'arrondi actif. Avec une norme, tous égaux devant le calcul !À la fin des années 70, chaque ordinateur avait sa propre représentation interne pour les nombres à virgule flottante. Or l'arithmétique à virgule flottante possède des subtilités et des difficultés inégalement maîtrisées par un constructeur moyen. Il arrivait qu'en une seule opération arithmétique, on perde plusieurs chiffres de précision. Sur certaines machines, une simple multiplication par 1 pouvait conduire à un dépassement de capacité ! Pour remédier à cette situation, l'IEEE Cette exigence, appelée arrondi exact, comporte de nombreux avantages : les résultats sont plus précis, les logiciels plus facilement portables (de l'ordinateur de développement aux ordinateurs grand public), des propriétés mathématiques sont préservées, on peut construire et prouver des algorithmes utilisant ces propriétés, tenir des raisonnements théoriques et obtenir des encadrements certains de résultats. Le dilemme du fabricant de tablesMais la norme IEEE 754 n'avance aucune spécification sur les fonctions élémentaires (sinus, tangente, exponentielle, logarithme...), pour cause de complexité. Leur évaluation ne peut s'effectuer qu'en calculant une approximation du résultat (à l'exception de cas particuliers comme log(1) = 0).
Voici, en substance, le casse-tête. Le résultat d'une fonction élémentaire peut être a priori très proche d'un nombre machine ou du milieu de deux nombres machine consécutifs, et si les calculs intermédiaires ne sont pas effectués avec suffisamment de précision, on ne saura pas comment arrondir. Il faut dont définir la précision nécessaire aux calculs intermédiaires pour que le « dilemme du fabricant de tables » ne se produise jamais. Mais cette précision est souvent difficile à obtenir De quelques siècles à quelques années de calculLa seule solution connue actuellement pour trouver la précision minimale nécessaire aux calculs intermédiaires consiste à effectuer une recherche exhaustive pour chaque fonction et chaque précision cible. Il faut chercher les « pires cas » Le cas de la simple précision est suffisamment simple, avec « seulement » 232 c'est-à-dire 4294967296 valeurs à tester par fonction, ce qui prend au plus quelques jours ! Mais le format le plus utilisé actuellement est la double précision, qui nécessite de tester 264 valeurs, soit 18446744073709551616 nombres machine. Les tester un par un prendrait quelques siècles sur un gros réseau de machines actuelles ! Un chercheur en arithmétique des ordinateurs, Vincent Lefèvre, a conçu un algorithme pour tester globalement un ensemble de nombres machine sur un petit intervalle, en approchant la courbe de la fonction à tester par un segment de droite et en cherchant une minoration de la distance de ce segment aux sommets d'une grille régulière. Au bout de seulement quelques années (!) de calcul sur des machines de l'École Normale Supérieure de Lyon, un certain nombre de résultats en double précision ont été trouvés, dont le très recherché « pire cas ». Certaines fonctions (exponentielle et logarithme : 2x et log2 x, log(x) et exp(x)) ont même été entièrement décryptées, ainsi que leurs pires cas. Pour les autres fonctions, les résultats sont restreints à un intervalle. Prochaines étapes de ces recherches de haut vol : obtenir certains résultats dans le format étendu double précision, pour lequel 1208925819614629174706176 nombres machine doivent être testés ! |