Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1980 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Probleme de soustraction de double

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Probleme de soustraction de double

n°742182
Profil sup​primé
Posté le 27-05-2004 à 20:01:29  answer
 

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

mood
Publicité
Posté le 27-05-2004 à 20:01:29  profilanswer
 

n°742187
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 20:08:43  profilanswer
 

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
n°742201
Profil sup​primé
Posté le 27-05-2004 à 20:20:51  answer
 

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 ?

n°742205
antp
Super Administrateur
Champion des excuses bidons
Posté le 27-05-2004 à 20:23:28  profilanswer
 

Bonne question... j'en sais rien.


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
n°742289
WebPac
Posté le 27-05-2004 à 21:23:40  profilanswer
 

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
n°742337
Profil sup​primé
Posté le 27-05-2004 à 22:09:34  answer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Probleme de soustraction de double

 

Sujets relatifs
Probleme de compilation javax.activation.ActivationDat aFlavor[MySQL] Probleme avec la Replication MySQL
CSS - probleme de marges avec IE par rapport à FIREFOXpetit problème de css/Jscript
[PL/SQL] Problème de transfert de tableprobleme de lancement de tomcat
Problème de transfert de fichier avec le protocole FTPProblème de tableau dynamique
probleme de Net::PingDe Acces à SQL server: problème de requête Helpppppppppppp!!!
Plus de sujets relatifs à : Probleme de soustraction de double


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR