Un calcul qui se trompe de peu
Tu ajoutes 10 centimes et 20 centimes. Tu attends 30 centimes.
Python répond 0,30000000000000004. Il y a un tout petit reste, tout au bout.
Ce n'est pas un bug de Python. Tous les langages font pareil. Dans cette leçon, tu comprends pourquoi, et comment ne pas te faire piéger avec de l'argent.
Mots-clés
| Mot | Ce que ça veut dire | Exemple |
|---|---|---|
| Nombre à virgule | Un nombre qui a une partie après la virgule. | 19,99 |
| Flottant | Le nom, en Python, d'un nombre à virgule. On écrit float. | 0.5 |
| Arrondir | Remplacer un nombre par un nombre proche, plus simple. | 1998.9999 devient 1999 |
| Valeur approchée | Un nombre très proche de la bonne valeur, mais pas exactement elle. | 0.30000000000000004 |
| Marge | L'écart que l'on accepte entre deux nombres pour dire qu'ils sont égaux. | 0.000001 |
| Centime | Un centième d'euro. Un nombre entier de centimes n'a aucune erreur. | 1999 centimes |
| Fraction | Une part d'un tout. La moitié est un demi. Un quart est une fraction aussi. | 1/4 = 0,25 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Une virgule en binaire
En décimal, après la virgule, les places valent un dixième, un centième, un millième. Chaque place est dix fois plus petite.
En binaire, c'est pareil, mais avec deux. Les places valent un demi, un quart, un huitième. Chaque place est deux fois plus petite que celle d'avant.
À toi : la surprise de Python
# En Python, le point remplace la virgule.
print(0.5 + 0.25)
print(0.1 + 0.2)
print(0.1 + 0.2 == 0.3)
# Python n'a pas fait d'erreur de calcul. Regarde la suite de la leçon.
# Essaie 0.1 + 0.1 + 0.1, puis 0.5 + 0.5 + 0.5.
Exemple travaillé : les places après la virgule
| Place | Fraction | Valeur décimale |
|---|---|---|
| Première | 1/2 | 0,5 |
| Deuxième | 1/4 | 0,25 |
| Troisième | 1/8 | 0,125 |
| Quatrième | 1/16 | 0,0625 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Lire 0,101 en binaire
Comme avant, un 1 veut dire : je prends cette place. Un 0 veut dire : je ne la prends pas.
Le nombre 0,101 prend la place d'un demi et celle d'un huitième. Il vaut 0,5 plus 0,125.
Exemple travaillé : deux nombres
| Binaire | Places prises | Calcul | Valeur |
|---|---|---|---|
| 0,11 | un demi, un quart | 0,5 + 0,25 | 0,75 |
| 0,101 | un demi, un huitième | 0,5 + 0,125 | 0,625 |
| 0,01 | un quart | 0,25 | 0,25 |
| 0,1 | un demi | 0,5 | 0,5 |
Les cellules que les étudiants remplissent restent vides dans cet aperçu.
Contrôle rapide
À toi de jouer
Contrôle rapide
3 questionsTes réponses sont corrigées ici et ne sont pas conservées. Un compte garde tes résultats.
Le nombre qu'on ne peut pas finir
En décimal, un tiers s'écrit 0,3333... et ne s'arrête jamais. On ne peut pas l'écrire en entier. On écrit une valeur approchée.
En binaire, c'est la même chose pour 0,1. Le dixième s'écrit 0,00011001100110011... et ne finit jamais.
L'ordinateur n'a que 64 bits pour un flottant. Il coupe, et il garde une valeur approchée.