Probleme de soustraction de double

Probleme de soustraction de double - C++ - Programmation

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 ?
 

Code :
  1. int main()
  2. {
  3. double a = 3.6;
  4. double b = 4.5;
  5. double c = 8.1;
  6. if ( a + b == c )
  7. cout << "a+b=c" << endl ;
  8. else
  9. cout << "a+b!=c" << endl;
  10. if ( a  == c - b )
  11. cout << "a=c-b" << endl ;
  12. else
  13. cout << "a!=c-b" << endl;
  14. }

Reply

Marsh Posté le 27-05-2004 à 20:01:29   

Reply

Marsh Posté le 27-05-2004 à 20:08:43    

C'est la FPU, c'est comme ça [:spamafote]
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)


Message édité par antp le 27-05-2004 à 20:09:34

---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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 ?

Reply

Marsh Posté le 27-05-2004 à 20:23:28    

Bonne question... j'en sais rien.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

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é.


---------------
WebPaC
Reply

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed