Probleme de soustraction de double - C++ - Programmation
Marsh Posté le 27-05-2004 à 20:08:43
C'est la FPU, c'est comme ça
Normalement on ne doit jamais faire de comparaison avec == sur des doubles, il faut voir si la différence entre les deux doubles est plus faible qu'une tolérance (epsilon)
Marsh Posté le 27-05-2004 à 20:20:51
oui ok mais la c quand meme des doubles simples, c pas des machins avec 15 chiffres derriere la virgule
et puis la calculatrice de windows elle fait pas ce genre d'erreur, comment ca se fait ? elle est pas codée avec des doubles ?
Marsh Posté le 27-05-2004 à 20:23:28
Bonne question... j'en sais rien.
Marsh Posté le 27-05-2004 à 21:23:40
En fait cela provient de la manière dont on code les doubles.
Le C++ utilise la décomposition en exposants de 2 comme pour les entiers mais avec des exposants négatifs.
Je m'explique, 4 c'est en binaire 100 2 expo 2.
Et bien 0.5 c'est si on veut 2 expo -1 donc avec mon codage 0,1
Et donc 0.25 se coderait par 0,01 en binaire.
Mon code avec des , n'est pas normé, c'est juste pour expliquer.
La base de décomposition pour les entiers est 1,2,4,8,16,32,64,128,256... tout le monde connait.
Pour les nombres a virgule, on rajoute :
0.5 0.25 0.125 0.0625 ...
Et donc 0.3 n'est pas faisable en sommes de puissances de 2, donc est arrondi.
On appelle ce bug l'underflow qui est pareil que l'overflow mais pour les petits nombres.
Pour ce qui est de la calculatrice de windows, je sais pas comment elle marche, désolé.
Marsh Posté le 27-05-2004 à 22:09:34
ah ok je pensais pas que les double etaient codés comme ca ...
effectivement la c'est logique que même pour des valeurs simples comme 2.3 ca merde
Marsh Posté le 27-05-2004 à 20:01:29
qu'est ce qu'est censé ecrire ce bout de code ?
a+b=c
a!=c-b
etonnant non ?
enfin flippant plutot ...
quelqu'un a l'explication ?