Les ordinateurs peuvent avoir du mal à afficher un comportement intelligent, mais effectuer des calculs arithmétiques à l'aveuglette est certainement leur fort. Ou est-ce?

L'échec de la calculatrice en ligne de Google et l'incapacité apparente d'Excel à donner des réponses correctes à des calculs simples sont des problèmes bien connus des programmeurs, mais ce ne sont pas vraiment des bogues au sens habituel du terme. Au lieu de cela, ils sont juste une conséquence du fait que les ordinateurs sont nuls en mathématiques.

Les ordinateurs effectuent des calculs d'une manière tout à fait différente de celle utilisée par les humains pour calculer - ce qui signifie qu'ils donnent habituellement la mauvaise réponse. Ici, nous examinons certaines des conséquences choquantes de cette révélation avant d'explorer la raison pour laquelle les ordinateurs craignent pour les maths.

  • 10 théories du complot informatique examinées

Fermer n'est pas assez proche

Pour que quiconque soit encore convaincu que les ordinateurs ne puissent pas comprendre l'arithmétique simple correctement, commençons par quelques exemples que vous pouvez essayer vous-même..

Tout d'abord, la calculatrice de Google. Si vous ne l'avez jamais essayé auparavant, pour avoir une idée de son fonctionnement, surfez sur www.google.co.uk, tapez 5 * 9 + (sqrt 9) ^ 3 dans le champ de recherche et cliquez sur "Rechercher". . Vous constaterez qu'il revient avec la réponse correcte: '5 * 9 + (sqrt 9) ^ 3 = 72'.

Essayons maintenant un autre calcul. Tapez 599.999.999.999.999 - 599.999.999.999.998. Clairement, cela devrait donner une réponse de 1. Incroyablement, cependant, Google répond avec ceci: '599 999 999 999 999 - 599 999 999 999 998 = 0'. Juste un exemple rare et malheureux, peut-être?

OK, essayons un autre calcul simple. Tapez = 850 * 77.1 dans la cellule A1 d'un classeur Excel 2007 (cela ne fonctionne pas - ou devrait-il en être ainsi - dans les versions antérieures d'Excel). Un peu de calcul mental suggère que la réponse devrait se situer autour de 60 000; en fait, la bonne réponse est 65 535.

Excel a d'autres idées. Il vous dira que le résultat de cette multiplication est de 100 000, ce qui est un énorme 34 465. Et pour prouver que ce n’est pas un éclair dans le plateau, pourquoi ne pas utiliser une sélection de calculatrices en ligne pour calculer 1,0 - 0,9 - 0,1?

Vous constaterez probablement qu'au moins la moitié d'entre eux auront une réponse de -2,77555756 E-17 - notation scientifique pour -0.0000000000000000277555756. (Si tous ceux que vous essayez d'essayer de donner la bonne réponse, consultez le site www.calculator.net.)

MAUVAIS MATHS: Puisque 1,0 - 0,9 - 0,1 est égal à 0, pourquoi tant de calculatrices en ligne sont-elles convaincues que cette valeur est la réponse à la place?

OK, cette réponse n’est peut-être pas très éloignée de la bonne réponse de 0, mais pourquoi la calculatrice ne peut-elle pas donner la bonne réponse - une réponse qui est manifestement évidente pour quiconque est familier avec l'arithmétique simple?

Comment les ordinateurs font les maths

Bien que les ordinateurs puissent gérer des nombres entiers (nombres entiers), ils stockent les nombres sous forme de virgule flottante dans un but général, car leur utilisation de la mémoire est bien plus efficace..

Prenons comme exemple la représentation en virgule flottante en double précision. Il utilise 64 bits pour stocker chaque nombre et permet de stocker des valeurs d'environ -10308 à 10308 (moins et plus 1 suivies de 308 zéros, respectivement). De plus, des valeurs fractionnaires aussi petites que plus ou moins 10-308 (c’est un point décimal suivi de 307 zéros puis d’un 1) peuvent être stockées..

En revanche, si les mêmes 64 bits étaient utilisés pour stocker des entiers, la plage serait −9 223 372 036 854 775 808 à +9 223 372 036 854 775 807 et les valeurs fractionnaires ne peuvent pas être représentées.

Le secret de cette efficacité apparemment étonnante est l’approximation. Sur ces 64 bits, l'un représente le signe (que la valeur soit positive ou négative), 52 bits représentent la mantisse (c'est-à-dire les nombres réels) et les 11 bits restants représentent l'exposant (combien de zéros ou où le point décimal est).

Ainsi, bien qu’une gamme beaucoup plus grande de nombres puisse être stockée en utilisant la notation en virgule flottante, la précision est en réalité inférieure à celle que l’on peut obtenir au format entier, puisque seuls 52 bits sont disponibles. En fait, 52 bits d’informations binaires représentent un nombre décimal de 16 bits. Par conséquent, toute valeur ne différant que par le 17ème point décimal sera considérée comme identique..

La situation où Google pense que 599 999 999 999 999 - 599 999 999 999 998 est égal à 0 est similaire, bien qu'il soit évident que la calculatrice de Google utilise en réalité moins que les 52 bits normaux pour la mantisse. Le fait que certaines calculatrices donnent un résultat non nul au calcul 1.0 - 0.9 - 0.1 pourrait sembler différent puisque nous semblons être loin de la limite de l'arithmétique en virgule flottante à 64 bits.

Mais c'est oublier un fait important - les ordinateurs fonctionnent en binaire. Et bien que 0,1 puisse n’avoir qu’un chiffre significatif en décimal, en manteau, la mantisse est une séquence répétitive. Cela signifie que 0.1 ne peut jamais être représenté avec précision en binaire, peu importe le nombre de bits que vous utilisez.