XL 2016 Erreur comparaison deux nombres décimale

Nouriddineo

XLDnaute Nouveau
Vous allez constater l'erreur sur excel facilement
Créer cell en A2 de la valeur de 3,2
Incrementer en bas 4,2 5,2 6,2 7,2 8,2 9,2....
En face de 3,2 cad B2 ecrit ceci
Si((A2-ENT(A2))=0,2;"vrai";"faux")
vous allez remarquer l'erreur entre 7,2 --> vrai et 8,2--> faux
C'est une erreur de microsoft....
 

mapomme

XLDnaute Barbatruc
Supporter XLD
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 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. Et dans ce cas la comparaison de deux nombres symboliquement égaux peut être différent de zéro (mais toutefois très petite). Certaines implantations prennent mieux en compte ce type de phénomènes.

La méthode de comparaison est celle proposée par @Dranreb et @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.
 
Dernière édition:

Nouriddineo

XLDnaute Nouveau
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.
Merci cher ami vous m'avez compris c'est ça le cœur du problème
Cette erreur m'a coûté 2 jours pour refaire un travail.
Merci encore une fois.
 

Statistiques des forums

Discussions
314 485
Messages
2 110 101
Membres
110 663
dernier inscrit
ToussaintBug