Ai-je tort de faire confiance à l’ordinateur ?

Cet article introduit la problématique de la qualité numérique des calculs sur ordinateur. Nous nous intéressons en particulier à la notion d’arrondi de calcul et les conséquences  qu’elle peut engendrer.

Sensibilisation aux problématiques de précision numérique

L’ordinateur est devenu un élément incontournable et essentiel de notre quotidien. Par exemple, les prévisions météo présentées par Evelyne Dheliat sont basées sur des estimations faites par un logiciel. A partir d’une multitude de données, ce type de logiciel (dit de simulation numérique) effectue des calculs pour prédire la température de demain, modéliser la forme optimale d’un avion, estimer la durée de notre trajet pour aller à l’aéroport ou l’itinéraire d’une fusée… En somme, notre quotidien dépend des simulations numériques faites à partir des calculs sur l’ordinateur. Il convient alors de s’assurer de la qualité et de la fiabilité de ces calculs.  Notons que plusieurs types d’erreurs peuvent influencer la fiabilité des calculs : les erreurs de fonctionnement de la machine surtout dans des conditions difficiles (radiations nucléaires…) et les erreurs des développeurs, c’est-à-dire les écarts entre le comportement prévu et le comportement réel du logiciel. Ces écarts sont généralement dus aux opérations illégales (mauvais accès mémoire, division par 0, accès des données inexistantes…), problèmes de logique (oubli/mauvais traitement d’une situation…), et à la précision numérique des calculs. Dans cet article, nous nous introduisons la notion de qualité numérique des calculs sur ordinateur. Nous montrons que dans certains cas (ou généralement), elle n’est pas toujours satisfaisante.

Une histoire de dixièmes de secondes …

 

Notre objectif ici est donc de vous sensibiliser aux problèmes de qualité des résultats des calculs faits par un ordinateur et notamment à leurs conséquences. En effet, l’histoire nous a déjà montré que ces types de problèmes, bien que souvent négligés,  peuvent générer d’énormes conséquences (Douglas,1998). A titre d’exemple, citons l’échec de l’anti-missile Patriot pendant la première guerre du Golfe qui a eu pour conséquence la mort d’une vingtaine de personnes.

20130605

Alors de quoi s’agit-il concrètement ? Nous y avons été tous confronté au moins une fois, quand par exemple au lieu d’afficher 1,0 notre calculatrice affichait 0,99999999999999999. L’exemple de la valeur de π peut également être pris :

Calculatrice Iphone     :          3,14159265

Calculatrice Google    :          3,14159265359

Calculator Windows 8 :          3,1415926535897932384626433832795

Nous avons là des valeurs proches de π mais différentes. Rappelons que  π est un nombre irrationnel et que son écriture décimale n’est pas finie. Ajoutons que pour stocker les nombres, l’ordinateur ne dispose que d’espace mémoire de taille limitée. Il travaillera alors avec une valeur approchée de π. Il en est de même pour tout système embarqué. De fait, il est presque impossible de représenter exactement tous les nombres réels sur ordinateur. Si deux nombres sont représentables en machine, alors le résultat d’une opération arithmétique (+, -, ÷, ×) entre ces deux nombres n’est, en général, pas représentable exactement en machine. On utilise alors une valeur approchée (un arrondi) c’est à dire renvoyer vers un des nombres représentables voisins. Par exemple, considérons les deux nombres suivants 2,345×101 et 6,789×103. L’addition de ces deux nombres donnerait 6,812×103 si on garde l’écriture scientifique avec 4 chiffres significatifs alors que le résultat exact est 6812,45.  L’utilisation de l’arrondi de calcul introduit donc une incertitude dont la propagation peut être source de résultats erronés. L’erreur commise est certes très petite mais son accumulation peut amener à des résultats complètement faux comme ce fut le cas du missile Patriot.

En 1991, ce missile tiré de Dahran (Arabie Saoudite) a manqué l’interception d’un missile irakien Scud. Ce dernier a tué 28 soldats et blessé quelque 100 autres personnes. L’erreur était due à une imprécision dans le calcul de la date de l’anti-missile Patriot. Celui-ci calcule l’heure en multiples de dixièmes de secondes. Le nombre de dixièmes de secondes depuis le démarrage du processeur est stocké puis multiplié par 1/10 pour obtenir le temps en secondes. Or 1/10 est non représentable sur ordinateur. L’approximation effectivement stocké était 209715× 2−21, soit une erreur d’environ 10−7. L’ordinateur du missile ayant été démarré une centaine d’heures auparavant, l’erreur totale dans le calcul d’heure était donc de 0, 34 seconde, temps pendant lequel le missile Scud parcourt plus de 500 mètres, d’où l’échec de l’interception.

De la même manière, si l’on fait usage d’un chronomètre dont la précision est de l’ordre du dixième de seconde, nous pouvons a priori estimer que l’erreur commise n’est pas importante. Par exemple, dans le cas d’un marathon ANEO d’une durée approximative de 3h40 min, l’erreur relative liée au chronométrage est négligeable puisque 0.1/(3*60*60 +40*60) = 0.00000757575. Mais s’il s’agissait du chronomètre utilisé pour la course des 100 mètres homme aux Jeux Olympiques de Pékin, Usain Bolt n’aurait certainement pas battu le record du monde. Si on considère que le temps moyen pour un 100 mètre est de 10 secondes, alors l’erreur relative dans ce cas serait d’environ 1%. Avec une telle erreur, il serait même difficile de déterminer l’ordre d’arrivée des coureurs…

Il ressort donc que l’ordinateur n’est pas aussi parfait que nous pouvons l’imaginer notamment quand on analyse les résultats de ses calculs. Les problèmes liés aux erreurs d’arrondi sont encore plus importants dès lors qu’on utilise le Calcul Haute Performance (HPC) et les supercalculateurs. En effet, l’évolution continue des architectures matérielles offre des puissances de calcul inimaginables il y a seulement 20 ans. Les supercalculateurs sont actuellement capables d’exécuter des millions de milliards d’opérations par seconde (pétaflopique) voire plus. Par exemple, il est intéressant de noter qu’un téléphone Iphone 4 est capable de réaliser 1.02 milliard d’opérations par seconde soit l’équivalent d’une machine du Top500 (classement des 500 ordinateurs les plus puissants du monde) en 1995 (Dongarra, 2013). Rappelons que la simulation numérique, grâce au calcul haute performance, est devenue de facto, un outil essentiel de la recherche scientifique, technologique et industrielle. Elle permet de remplacer les expériences qui ne peuvent être menées en laboratoire quand elles sont dangereuses (accidents), de longue durée (climatologie), inaccessibles (astrophysique), interdites (essais nucléaires) ou tout simplement trop coûteuses. On peut alors facilement imaginer les catastrophes que peuvent engendrer la propagation des erreurs d’arrondi dans un logiciel de simulation numérique. Alston Householder confiait à ce propos: “It makes me nervous to y on airplanes since I know they are designed using oating-point arithmetic”

L’ordinateur peut être source d’erreur… et alors ?

 

En se basant sur les notions exposées dans cet article, il est évident qu’il est impossible d’éviter la propagation des erreurs d’arrondi dans les calculs sur ordinateurs. La solution idéale du point de vue des résultats serait d’effectuer tous les calculs avec une précision absolue et sans erreurs, par exemple avec du calcul symbolique. Encore faudrait-il que de tels systèmes soient capables de faire de grandes simulations complexes pour être utiles. Il y a donc un compromis à faire entre la précision des résultats, la complexité des simulations, et la vitesse d’exécution des logiciels. La première étape pour maîtriser ce compromis est de quantifier l’erreur. Il est possible borner l’erreur finale afin d’estimer la qualité numérique de notre résultat. L’analyse et la compréhension des effets de la propagation des erreurs d’arrondi permettent d’estimer plus précisément la qualité numérique des calculs sur ordinateur. Des techniques permettent ensuite d’améliorer la précision des résultats calculés. Outre l’analyse et l’amélioration de la précision, on peut aussi envisager de détecter dynamiquement les erreurs lors des calculs, et agir en conséquence. Il importe aussi de signaler que les problèmes numériques ne proviennent pas toujours des programmateurs mais aussi de l’architecture ou du langage de programmation utilisé. Nous nous proposons de faire un petit tour d’horizon des concepts que tout concepteur de simulation numérique se doit de connaître dans un prochain article.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *