Idée reçue : Les ordinateurs ne se trompent jamais
Mais quand ça ne marche pas, on dit alors : C'est la faute à l'ordinateur !
Figurez-vous que j’étais en train de regarder la très intéressante conférence de Gilles Dowek sur les mathématiques des ordinateurs, ces mathématiques si « déraisonnablement efficaces » quand… Patatras ! J’allais justement vous écrire que les ordinateurs, en principe, ne se trompent jamais, puisqu’ils sont programmés en utilisant des langages formels — algébriques pour être précis — et que ce sont finalement des éléments mathématiques incarnés… Et voilà mon propre ordinateur qui « me » trompe ou qui « se » trompe ou alors… Est-ce que je me trompe ?
Ce n’est sûrement pas la faute à l’ordinateur ! Les ordinateurs sont des machines, des outils, pas différents d’un marteau. Si en manipulant un marteau, nous nous en mettons un bon coup sur les doigts, au delà de notre réflexe humain naturel souvent exprimé par un langage imagé, force est de constater que le marteau n’y est pour rien ! L’ordinateur non plus ne peut pas « intentionnellement » se tromper ni être « responsable » de quoi que ce soit : c’est un objet.
Toutefois, les ordinateurs sont des machines bien imparfaites, qui peuvent faire l’objet d’erreurs de conception matérielle et surtout d’erreurs de programmation. Ils produisent donc facilement des résultats erronés.
Des ordinateurs et des pannes
Les machines peuvent être déficientes, avoir une panne, etc. Le pire, c’est une panne qui passe inaperçue mais endommage le contenu, et ce, au plus mauvais moment, sans que vous vous en rendiez compte. Un tel risque se calcule assez bien. Il se réduit au maximum mais n’est jamais nul. Si vous avez 99 % de chances que la partie gauche de votre ordinateur ne soit pas en panne et 99 % de chances que la partie droite de votre ordinateur ne soit pas en panne, alors vous avez 98,01 % de chances qu’aucune des deux parties ne soit en panne : vous perdez 1 % ! Avec les millions d’éléments électroniques intégrés dans les circuits des ordinateurs, il y a toujours un risque que ces pannes se produisent et que des erreurs se glissent dans les données. Heureusement, cela ne se produit presque jamais !
Comment ? En fait, le risque d’erreur se réduit au maximum car l’information est conservée ou transmise de manière redondante. Par exemple, dans les réseaux sans fils, il y a toujours des erreurs, mais elles sont facilement détectées et corrigées. Tenez, tannez, tenez : par exemple, pur exalte, par exemple, en répétant, en répétant, en repartant, trois fois de suite, trois fois de suite, trop fou de suite, votre massage, votre message, votre message ! Grâce à la redondance, même s’il y a une erreur à chaque fois, non seulement vous pouvez détecter la présence de cette erreur en comparant les trois occurrences, mais aussi la corriger en prenant les deux occurrences qui se ressemblent le plus. On peut même faire beaucoup mieux à l’aide des codes correcteurs. Ainsi, grâce à ces prouesses mathématiques et technologiques, votre ordinateur n’a presque jamais de panne, mais pensez tout de même à sauvegarder régulièrement vos données !
Des ordinateurs et des bogues
Eh oui, il y a aussi des bugs ! Les pires, ce sont les erreurs de programmation. Prouver qu’un algorithme ne risque pas de se tromper est un sujet de recherche encore très ouvert (voir l’article sur les nombres premiers). Le programme d’ordinateur, le « logiciel », peut comporter une erreur qui n’est pas toujours facile à détecter. Il peut aussi n’avoir aucune erreur au départ, mais avoir été ensuite modifié, utilisé avec d’autres composants logiciels, qui font qu’il ne marche plus. Avec des conséquences parfois fort graves, par exemple dans le cas des machines à voter.
Mais attention, il y a pire : le logiciel peut être parfait, mais ne pas correspondre à ce qui est souhaité ! Le calcul est « juste », mais le résultat espéré peut être faussé à cause du modèle utilisé (par exemple un logiciel de météo valide l’été mais inadapté en cas de tempête, ou un modèle limité par nos connaissances actuelles). Il dépend aussi des données de départ qui peuvent être erronées (par exemple un logiciel de météo avec de mauvaises entrées). Pour en savoir plus sur la notion de modèle en informatique, vous pouvez consulter des exemples aussi variés que la modélisation de la guitare acoustique ou de la croissance des plantes.
Pire encore : tout peut être parfait, mais l’humain qui prend connaissance du résultat lui donne un autre sens. En effet, l’ordinateur ne « comprend rien à rien », il ne donne pas du sens aux données qu’il traite. Ce sont les humains qui créent du sens dans leur cerveau en interagissant avec l’ordinateur.
Des ordinateurs et des calculs numériques
C’est dans le domaine des calculs numériques que les « pièges » qui conduisent à ce que nous nous trompions avec un ordinateur peuvent être les plus déroutants. Écoutez à ce sujet l’épisode de podcast Pourquoi mon ordinateur calcule-t-il faux ? Les calculs avec les nombres réels ne sont jamais totalement exacts (voir l’article MPFR : vers un calcul flottant correct ?) et cela peut aller jusqu’à fausser les raisonnements qui sont programmés avec des données numériques (par exemple pour les algorithmes géométriques).
Par ailleurs, le programme d’ordinateur peut très bien fonctionner correctement, mais avec un temps de calcul extrêmement long : il nous trompe alors sur le fait que nous allons avoir un résultat dans un délai raisonnable. Cette difficulté se retrouve dans de nombreux problèmes « combinatoires » : il y a bien des choses que l’on peut faire en temps raisonnable, comme trier des données ou trouver le plus court chemin, mais des problèmes aussi simples que remplir au mieux un sac à dos ne pourront jamais — c’est mathématiquement démontré — être résolus sans explorer sans relâche toutes les possibilités, et alors, cela donne des temps de calculs vertigineux — plusieurs siècles si on calculait à la vitesse de la lumière par exemple — dès que la taille du problème augmente beaucoup.
Des ordinateurs éternellement limités
Pourra-t-on améliorer les ordinateurs, de manière à ce qu’ils ne se trompent jamais ? Malheureusement non ! Ces sources d’erreurs sont en effet intrinsèques à l’informatique. Pis encore, certains problèmes ne sont pas « calculables » sur ordinateur. Dans ces cas-là, l’ordinateur se trompe tout le temps ! Par exemple, il est indispensable de savoir si un programme d’ordinateur finit par s’arrêter ou s’il boucle indéfiniment. Un logiciel peut-il résoudre automatiquement ce problème ? Eh bien non ! Il n’existe pas de programme d’ordinateur qui puisse tester à coup sûr si un autre programme finit par s’arrêter ou non. Tous les programmes d’ordinateurs risquent de boucler indéfiniment ou de tomber dans un cas « singulier » qui provoque une erreur. Et il est impossible d’écrire un « super » programme qui détecte systématiquement ces erreurs. On a démontré que ce « super » programme n’existait pas.
Toutes les méthodes (informatiques ou humaines) qui vont permettre de vérifier si un programme se trompe seront comme les calculs numériques, approximatives. Alors, mieux vaut bien comprendre les limites de ces méthodes, pour en profiter sans les subir… D’autant que dans la très grande majorité des cas, tout se passe bien !
Newsletter
Le responsable de ce traitement est Inria. En saisissant votre adresse mail, vous consentez à recevoir chaque mois une sélection d'articles et à ce que vos données soient collectées et stockées comme décrit dans notre politique de confidentialité
Niveau de lecture
Aidez-nous à évaluer le niveau de lecture de ce document.
Votre choix a été pris en compte. Merci d'avoir estimé le niveau de ce document !