Représentation approximative des nombres réels
En informatique, les nombres à virgule sont appelés des "nombres à virgule flottante". Contrairement aux entiers, leur représentation en machine est souvent une approximation, car certains nombres réels ne peuvent pas être codés de manière exacte en binaire avec un nombre fini de bits.
Il s'agit d'une méthode de codage des nombres réels calquée sur la notation scientifique. Le nombre est décomposé en trois parties : un signe, une mantisse (les chiffres significatifs) et un exposant (qui détermine la position de la virgule).
I. La structure du codage
La plupart des systèmes modernes utilisent la norme IEEE 754. Pour un nombre codé sur 32 bits (précision simple), la répartition est la suivante :
1bit pour le signe (0 pour +, 1 pour -).8bits pour l'exposant.23bits pour la mantisse.
La valeur d'un nombre flottant suit la formule : Signe × Mantisse × 2Exposant
II. Le problème de la précision
Certains nombres décimaux très simples, comme 0,1, n'ont pas de représentation finie en binaire (leur développement est périodique : 0,00011001100...). La machine doit donc couper ce nombre, ce qui entraîne une petite erreur.
L'erreur d'arrondi est la différence entre la valeur réelle d'un nombre et sa représentation stockée en machine. Ces erreurs peuvent s'accumuler lors de calculs répétés.
En Python ou en JavaScript, si vous testez l'égalité 0.1 + 0.2 == 0.3, le résultat sera False car la somme stockée est légèrement différente de 0,3.
III. Précision simple vs Précision double
Pour limiter ces erreurs, on peut augmenter le nombre de bits alloués à la mantisse et à l'exposant.
Simple précision :
32bits (environ 7 chiffres décimaux significatifs).Double précision :
64bits (environ 15 chiffres décimaux significatifs).
En double précision, on peut représenter des nombres allant jusqu'à environ 1,8 × 10308.
IV. Conséquences pour le programmeur
À cause de ces approximations, il est fortement déconseillé de tester l'égalité stricte entre deux nombres flottants avec l'opérateur ==. On préfère vérifier si la différence entre les deux nombres est inférieure à un seuil très petit (appelé "epsilon").