Bonsoir à tous
C'est une constatation classique.
Si dans la représentation classique en puissances de 10 (... ; 1000 ; 100; 1; 0,1 ; 0,01 ; 0,001) un nombre décimal s'écrit aisément et de manière finie, quand on le transforme le même nombre en représentation binaire (... ; 128 ; 64 ; 32 ; 16 ; 8 ; 4 ; 2 ; 1 ; 0,5 ; 0.25; 0.125; 0.0625 ; ...) alors sa représentation binaire n'est pas forcement finie. Les registres du microprocesseur étant de longueur finie, à un moment donné, on sera obligé de tronquer.
Certaines implantations prennent mieux en compte ce type de phénomènes.
La méthode de comparaison est celle proposée par
@job75.
Pour mieux illustrer, considérons le nombre 1/3 en décimal. Si vous voulez l'écrire sur un cahier, vous écrirez 1,33333333... Le cahier a un nombre fini de pages (aussi épais soit-il). Une fois le cahier rempli, le nombre écrit sera forcément différent du nombre "symbolique" de 1/3. Il peut se passer la même chose dans les registres d'un microprocesseur (en binaire).
Je trouve plutôt salutaire d'être de temps en temps confronté à ce type de situation : cela nous rappelle que l'ordinateur n'est qu'un outil, qu'un outil n'est valable que pour certaines situations, qu'il a des limites d'utilisation et que l'artisan qui le manipule doit savoir ce qu'il fait.
C'est perturbant. La première fois que j'ai été confronté à ce type de situation, j'avais fait un programme qui marchait dans 99,99 % des cas et un des utilisateurs m'a sorti un (et un seul cas) avec un résultat non conforme à l'attendu. J'ai mis un certain temps à voir d'où l'erreur provenait.