La représentation des nombres
Cours · informatique (tronc commun des prépas scientifiques), chapitre 11 · prépas scientifiques, tronc commun · le début du chapitre, la suite sur Adloun
11.1 Introduction et motivation
Le chapitre 1 l'avait promis en passant : 0.1 + 0.2 ne vaut pas 0.3, et il faudrait un jour comprendre pourquoi. Ce jour est arrivé. Une machine ne manipule que des suites finies de bits — des et des par paquets de taille fixe — et tout nombre doit s'y loger : les entiers, qui y tiennent exactement mais pas tous ; les réels, qui n'y tiennent presque jamais et qu'on y approche par les flottants. De cette finitude découlent des phénomènes que tout programmeur scientifique rencontre : le débordement des entiers à taille fixe (que Python masque, mais pas les autres langages ni les bibliothèques numériques), l'impossibilité de représenter , l'absorption des petits nombres par les grands, l'annulation catastrophique des soustractions — et l'interdiction, déjà décrétée au chapitre 1, de comparer des flottants par ==.
L'objectif du chapitre est fixé par le programme : sans formalisation théorique, comprendre les enjeux de la représentation pour expliquer les difficultés rencontrées et les précautions à prendre. On saura, à la fin, répondre en connaissance de cause aux trois questions du calcul numérique : que peut contenir un mot machine ? qu'est-ce qu'un flottant, exactement ? et que vaut une égalité entre deux résultats de calcul ?
11.2 Les entiers positifs sur des mots de taille fixe
11.2.1 Le mot machine
Le bit est l'unité d'information : ou . Un mot de taille est une suite de bits ; il représente naturellement l'entier positif
— l'écriture en base deux, où chaque position vaut une puissance de (comme chaque position décimale vaut une puissance de ). Exemple sur bits : .
Un mot de bits représente exactement les entiers de : valeurs distinctes, ni une de plus ni une de moins — il y a précisément suites de bits. Repères : bits à (les pixels du chapitre 8 !), bits environ , bits environ .
Que vaut sur bits ? L'addition binaire propage une retenue qui sort du mot : — un bit de trop, qui est perdu. Résultat stocké : . C'est le débordement (overflow) : sur bits, l'arithmétique est silencieusement modulo . Le bogue du milieu de la dichotomie (chapitre 5) en était une manifestation : peut déborder même quand le résultat final tiendrait ; le compteur kilométrique qui repasse à zéro en est l'image fidèle.
La conversion de base n'est pas un objectif du programme — mais savoir lire une écriture binaire courte et retrouver les puissances de (, déjà rencontré au chapitre 5) reste indispensable pour raisonner sur les plages et les débordements. En Python, bin(211) affiche '0b11010011' et int("11010011", 2) revient — utile pour expérimenter.
Exercices du chapitre
- Mesurer l'epsilon machine corrigé
- La somme dans le bon ordre corrigé
- Le trou à corrigé
- Quantité conjuguée et annulation catastrophique corrigé
- Le coût réel des grands entiers corrigé
- L'égalité des flottants, version raisonnée corrigé