Informatique et nombres à virgules : l’erreur
Le système de gestion des nombres en informatique est basé sur le binaire, c’est-à-dire une suite de 1 et de 0. Ainsi, pour passer du binaire au décimal, qui est plus facile à représenter pour les êtres humains non geeks, on effectue un calcul avec des puissances de 2 (car on a 2 valeurs possibles avec 0 ou 1).
Exemple : 00001001 = 0x27+0x26+0x25+0x24+1×23+0x22+0x21+1×20 = 9
Pour ce qui se passe après la virgule, c’est pareil, mais avec des puissances négatives.
Exemple : 1001.01 = 1×23+0x22+0x21+1×20+0x2-1+1×2-2 = 9.25
Vous l’aurez compris, si je souhaite modéliser 9.25, cela ne pose aucun problème. Quid de 9.26 ou 9.24 ? Eh bien là, il est techniquement impossible d’avoir une valeur juste ! Oui, l’informatique n’a pas été conçue pour les nombres à virgues !!!
Alors, que faire ?
Je propose une solution : transformer tous les nombres en pseudo-écriture scientifique, c’est-à-dire avec une puissance de 10. A la base, l’écriture scientifique donne un nombre à virgule compris entre ]0;10[ avec une puissance de 10, ici on représenterait un entier avec une puissance.
Ecriture scientifique de 123.456 : 1.23456×102
Ecriture proposée de 123.456 : 123456×10-3
L’avantage est que l’on stocke une valeur juste et entière en mémoire. Après, pour des opérations, on aura non plus des nombres à virgules flottantes, mais à puissance flottante.
Exemple de calcul :
1.5+2.25 = 15×10-1 + 225×10-2
= 150×10-2 + 225×10-2
= 375×10-2
= 3.75