Tapez 0.1 + 0.2 dans presque n’importe quelle calculatrice qui travaille en virgule flottante binaire et la réponse brute est 0.30000000000000004, pas 0.3. Cette calculatrice produit la même valeur en interne, puis l’arrondit pour l’affichage, donc vous voyez 0.3. Le coupable est un décalage de bases : les humains écrivent les nombres en base 10, les ordinateurs les stockent en base 2, et 0.1 n’existe pas exactement en base 2.
Points clés
0.1 + 0.2vaut0.30000000000000004en virgule flottante binaire, dans tous les langages.- 0.1 en binaire est un motif répétitif,
0.0001100110011….- Cette calculatrice arrondit les résultats à 12 chiffres significatifs, donc elle affiche
0.3, pas le double brut.- La valeur stockée de 0.1 sort comme
0.10000000000000000555111512312578….
D’où viennent les chiffres supplémentaires
Vous savez déjà que certaines fractions ne vont pas proprement en base 10. Un tiers vaut 0.333…, qui se répète à l’infini, parce que 3 n’est pas un facteur de 10. Les ordinateurs stockent les nombres en base 2, où les seules fractions propres ont des puissances de deux au dénominateur : les moitiés, les quarts, les huitièmes. Un dixième n’est pas dans cette liste. En binaire, 0.1 vaut 0.0001100110011…, qui se répète à l’infini, exactement comme un tiers se répète en décimal.
Un nombre en double précision a 53 bits pour les chiffres, donc le développement binaire infini est coupé court. La valeur stockée quand vous tapez 0.1 est 0.1000000000000000055511151231257827021181583404541015625. Elle est proche de 0.1 mais ne lui est pas égale. Additionnez deux de ces valeurs légèrement fausses et les erreurs ne s’annulent pas ; elles s’empilent, et la somme atterrit un pas après 0.3. D’où 0.30000000000000004. C’est la norme IEEE 754, implémentée par pratiquement tous les processeurs et langages, donc la même réponse apparaît en JavaScript, en Python, en C et dans Excel.
Ce que cette calculatrice fait à ce sujet
Le contrat de fonctionnement de ce site est énoncé dans le guide de l’arithmétique à virgule flottante : chaque résultat est arrondi à 12 chiffres significatifs avant d’être affiché. Un double porte environ 15 à 17 chiffres fiables, donc arrondir à 12 garde chaque chiffre de confiance et laisse tomber les derniers, qui sont exactement l’endroit où vit le bruit accumulé.
Exemple détaillé 1 : tapez-le. Sur la calculatrice principale, tapez 0.1+0.2. L’affichage renvoie 0.3. Le double sous-jacent est 0.30000000000000004, mais la règle d’affichage le cache. Faites le même tour dans l’autre sens avec 0.3-0.2 : le résultat brut est 0.09999999999999998, et l’affichage montre 0.1. La multiplication le fait aussi : 1.1*3 contient 3.3000000000000003 et affiche 3.3.
Quand la réponse ne peut pas vraiment être épinglée, la calculatrice ne fait pas semblant. Tapez 1/3 et elle affiche 0.333333333333, douze trois puis elle s’arrête. Le guide des chiffres significatifs explique exactement comment cet arrondi et ces limites d’affichage fonctionnent.
Quand la différence compte
Pour l’arithmétique quotidienne, les devoirs et les estimations d’ingénierie, 12 chiffres fiables représentent bien plus de précision que n’importe quelle mesure ne le justifie. La différence importe dans trois situations plus étroites, toutes décrites dans le guide de l’arithmétique à virgule flottante :
- L’argent. Ne stockez pas une devise en nombre à virgule flottante. Les pennies et les cents comme entiers sont la voie sûre, et les totaux cumulés de minuscules erreurs sont une classe connue de bugs de comptabilité.
- Les tests d’égalité dans le code. Tester si deux flottants calculés sont égaux n’est pas fiable ; comparez avec une petite tolérance à la place.
- Les longues chaînes d’opérations. Les erreurs s’accumulent, et soustraire deux nombres presque égaux perd le plus de précision.
Exemple détaillé 2 : les fractions exactes. Quand vous avez besoin d’une fraction exactement correcte, la calculatrice de fractions garde les numérateurs et les dénominateurs comme nombres entiers et n’arrondit jamais. Tapez 1/3 + 1/3 + 1/3 là-bas et elle renvoie exactement 1. Faites la même somme avec les décimales affichées, 0.333333333333 + 0.333333333333 + 0.333333333333, et le résultat est 0.999999999999. Même idée, mondes différents.
Exemple détaillé 3 : racines et carrés. sqrt(2)^2 est un piège classique. Logiquement, la racine carrée de 2 au carré vaut 2. Sur la calculatrice le résultat brut est 2.0000000000000004, arrondi à 2 pour l’affichage. Quand vous avez besoin de la valeur exacte, gardez la forme racine et évaluez une fois à la fin, ce que la référence des fonctions de la calculatrice aborde sous la touche √.
Il y a aussi une frontière de nombres entiers qui vaut la peine d’être connue. En dessous de 2^53 − 1 = 9,007,199,254,740,991, chaque nombre entier est représentable exactement et la calculatrice imprime tous ses chiffres. Au-dessus de cette ligne, des valeurs comme 19! passent en notation scientifique plutôt que de revendiquer une précision qui n’existe pas.
Questions fréquentes
0.1 plus 0.2 vaut-il vraiment 0.3 ou pas ?
En arithmétique décimale exacte, oui. En virgule flottante binaire, le résultat stocké est 0.30000000000000004. Cette calculatrice renvoie la même valeur en interne et arrondit à 12 chiffres significatifs pour l’affichage, donc vous voyez 0.3.
Est-ce un bug de la calculatrice ?
Non. C’est la norme IEEE 754 que chaque processeur et langage courant implémente. Les programmes et les calculatrices qui semblent éviter le problème le cachent avec un arrondi d’affichage, exactement comme celle-ci.
Comment obtenir une réponse exacte ?
Utilisez la calculatrice de fractions pour l’arithmétique rationnelle, qui n’arrondit jamais, ou gardez des formes symboliques comme sqrt(2) et pi dans l’expression jusqu’à l’étape finale.
Pourquoi 1 divisé par 3 n’affiche-t-il que douze trois ?
Parce qu’un tiers n’a aucune représentation exacte dans aucune des deux bases. La calculatrice affiche douze chiffres fiables puis s’arrête plutôt que de prétendre que la valeur se termine.