Le nombre dans l'ordinateur
Sommaire
Le nombre dans l'ordinateur
Quelques éléments plus précis sur le codage des données numériques
PAGE EN COURS . . !!! A DANS QQ HEURES !!!!
Quelle représentation machine des nombres ?
- → Le chapitre 1 du manuel pour les enseignants ISN donne les éléments de base sur ce sujet :
- Le format des nombres entiers donc du système binaire (complément à 1 et à 2, etc.),
- Le format des nombres décimaux, à virgule flottante (avec mantisse et exposant) et à virgule fixe.
- → Le manuel scolaire disponible en ligne pour préparer les cours, le chapitre 7 est consacré à représenter les nombres entiers et à virgule au niveau des élèves.
Il faut avant tout bien comprendre «pourquoi mon ordinateur calcule faux» les liens proposés avec ce petit podcast donnant les éléments clés. En bref il faut recommander de faire les calculs en "double précision" ('double') ce qui donne 16 chiffres significatifs, donc 52 bits. On peut se dire que, à l'arrache, on perd un bit de précision à chaque étape de calcul (le dernier bit est indéfini à 1/2 bits près à cause de l'arrondi, lorsque deux nombres de même exposant se combinent additivement, par exemple, ils cumulent l'incertitude sur le dernier bit qui ne signifie plus rien). Assez rapidement on reste avec comme ordre de grandeur 6 à 10 chiffres significatifs.
&→ Arithmétique_flottante_(cours_sur) permet d'en savoir plus sur le calcul en virgule flottante et donne les éléments d'approfondissement.
Il fait ensuite comprendre que plusieurs fonctions donnent comme résultat des valeurs infinies ou indéfinies:
- → Infinity_and_NaN_Arithmetic_Rules La table des règles de gestion des valeurs infinies (+/-oo) et indéfinies lors de calculs sur les flottants. Intéressant pour comprendre le codage le nombre et vérifier les liens avec les calculs symboliques sur les nombres réels à l'infini.
Comment stocker les nombres dans les fichiers ?
- Billet:Base64 Quand on veut coder des nombres (entiers) sous une forme aisément transmissible, se pose rapidement la question d'un codage compatible avec l'écriture de textes .
Comment calculer en précision arbitraire ?
Il y a deux grandes pistes :
- Utiliser des bibliothèques de calcul numérique en précision arbitraire sur
- des nombres entiers ou
- des nombres décimaux.
- Disponibles dans tous les langages ces objets encapsulent des tableaux de longueurs variables permettant de faire des calculs avec des mantissent et/ou des exposants soit de longueur prédéfinie quelconque soit de longueur dynamique au fil du calcul.
- Un tel outillage sert uniquement dans des cas très spécifiques (ex: calcul sur des clés de cryptographie) car son coût de calcul pour le traitement de données multimédias par exemple est prohibitif.
- Utiliser des calculateurs symboliques
- Qui vont représenter les nombres en précision "infinie" c'est à dire ne 'feront pas' de calculs numériques approximatifs (sauf demande explicite).
- Ainsi √4 s'évaluera à 2, et 4/12 à 1/3, mais √2 ou 1/3 ne seront jamais évalués mais manipulés à travers leurs propriétés symboliques.
- Qui vont représenter les nombres en précision "infinie" c'est à dire ne 'feront pas' de calculs numériques approximatifs (sauf demande explicite).
Quelle spécification pour une valeur numérique ?
Une valeur numérique n'est pas un «nombre» mais une quantité définie par
- ses valeurs minimale et maximale,
- une valeur initiale ou "par défaut",
- la précision mesurable,
en plus, le cas échéant, de son unité physique.
Ainsi, le mètre du bricoleur mesure t'il à un millimètre près des longueurs entre 0 et 2 ou 3 mètres, la position d'un point dans une image est donnée à un pixel près entre les bords de l'image, le radar de la prévention routière mesure des vitesse avec une marge d'erreur d'environ 5km/h, etc.
Connaître les bornes min et max d'une valeur est très précieux, que ce soit pour demander à l'utilisateur une valeur qui ne soit pas aberrante, vérifier qu'un calcul n'ait pas divergé, etc.. Connaitre la précision d'une valeur permet de savoir jusqu'à quelle décimale un algorithme doit approximer une solution sans calcul inutile, ou d'ajuster un affichage graphique, etc.
Deux valeurs numériques dont la différence est plus petite que la précision mesurable sont indiscernables. Elles sont peut-être vraiment égales, mais nous n'en saurons rien, puisqu'il est toujours possible qu'elles diffèrent d'une quantité plus petite que la précision mesurable. Si en revanche leur différence est plus grande que la précision mesurable alors on peut affirmer qu'elles ne sont pas similaires.
Ce qui est défini ici dans le cas déterministe se traduit aussi dans le cas stochastique : une valeur aléatoire est définie par sa valeur moyenne m, estimée sur n échantillons et sa dispersion s qui se calcule comme une erreur quadratique moyenne. Ce calcul permet d'affirmer, dans un cas standard, qu'avec une probabilité d'environ 90% la valeur se situe dans un intervalle à peu près [m - 2 s, m + 2 s[ autour de la moyenne.
Mais le problème de la précision entre une valeur numérique "parfaite" et celle obtenue ne se pose pas uniquement lors d'une mesure. Au sein même des calculateurs, des erreurs complexes se propagent et s'agrandissent. Et une très belle idée a alors émergé : celle de considérer que les ordinateurs "calculent toujours faux", mais de se donner des outils pour estimer de combien.