égalité de deux doubles

égalité de deux doubles - C#/.NET managed - Programmation

Marsh Posté le 20-12-2010 à 23:53:52    

Bonjour,
me voila devant un probleme bizzare, j'ai deux doubles dont la valeur est identique a l'affichage ... mais la différence n'est pas toujours nulle ...
 
Le code :
 

Code :
  1. cerr.precision(10000);
  2.  double d1, d2;
  3.  d1 = ****************
  4.  d2 = ****************
  5. //   cerr << "valeur d1 : " << d1 << '\n';
  6. //   cerr << "valeur d2 : " << d2 << '\n';
  7. //   cerr << "valeur d1-d2 : " << d1-d2 << '\n';
  8.  if(d1 != d2){cerr << "valeur de d1-d2 : " << d1-d2 <<"\naaaaaaaaaaaaaaaaaaaaaaaaaaaaarg2\n";exit(1);}


 
Le résultat :
 

Code :
  1. valeur de d1-d2 : 0
  2. aaaaaaaaaaaaaaaaaaaaaaaaaaaaarg2


 
 
Si je décommente les lignes :
 

Code :
  1. cerr.precision(10000);
  2.  double d1, d2;
  3.  d1 = ****************
  4.  d2 = ****************
  5.   cerr << "valeur d1 : " << d1 << '\n';
  6.   cerr << "valeur d2 : " << d2 << '\n';
  7.   cerr << "valeur d1-d2 : " << d1-d2 << '\n';
  8.  if(d1 != d2){cerr << "valeur de d1-d2 : " << d1-d2 <<"\naaaaaaaaaaaaaaaaaaaaaaaaaaaaarg2\n";exit(1);}


 
 
J'ai comme résultat :
 

Code :
  1. valeur d1 : 0.475630950105875693889601052433135919272899627685546875
  2. valeur d2 : 0.475630950105875693889601052433135919272899627685546875
  3. valeur d1-d2 : 0


 
 
 
Etrange .. le fait d'afficher les valeurs "stabilise" les deux variables .... Une idée ?

Reply

Marsh Posté le 20-12-2010 à 23:53:52   

Reply

Marsh Posté le 21-12-2010 à 02:25:48    

J'ai pas trop d'explication au comportement de ton programme.
 
Mais en principe pour tester l'égalité de deux doubles il faut faire
Math.Abs(a - b) < epsilon
avec epsilon égal à la précision que tu souhaites

Reply

Marsh Posté le 21-12-2010 à 08:42:51    

Reply

Sujets relatifs:

Leave a Replay

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