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

  FORUM HardWare.fr
  Programmation
  C++

  comparer deix doubles

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparer deix doubles

n°1908256
Glock 17Pr​o
Posté le 24-07-2009 à 12:03:51  profilanswer
 

youhou,
 
vous faites comment pour déterminer si un double est inférieur à un autre
 
if( (d2 - d1) > numeric_limits<double>::epsilon() )
{
//d1 est plus petit que d2
}
 
if( (d1 - d2) > numeric_limits<double>::epsilon() )
{
//d1 est plus grand que d2
}
 
 
 
c'est correct ?
 
 
Merci.


Message édité par Glock 17Pro le 24-07-2009 à 12:09:11
mood
Publicité
Posté le 24-07-2009 à 12:03:51  profilanswer
 

n°1908274
Deamon
Posté le 24-07-2009 à 13:14:46  profilanswer
 

Ca te va pas d2<d1 ? T'as besoin d'autant de précision que ça ?

n°1908278
Glock 17Pr​o
Posté le 24-07-2009 à 13:30:05  profilanswer
 

hum oui je me suis mélanger les pinceaux avec tester l'égalité de deux doubles

n°1908371
Un Program​meur
Posté le 24-07-2009 à 15:40:46  profilanswer
 

De toute manière, utiliser systématiquement epsilon() comme tu le fais pour l'égalité est tout aussi problématique (ça casse tout les cas où on a besoin de la transitivité, l'utilisation de epsilon() sans mise à l'échelle dépendante des données comparées ne fait pas ce qui est désiré si celles-ci sont trop grandes -- genre plus grande que 1 -- ou trop petite -- genre plus petite que epsilon()).


---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1908429
Taz
bisounours-codeur
Posté le 24-07-2009 à 20:58:13  profilanswer
 

Oui. Et utilise abs pour éviter de faire 2 fois le travail.

n°1908490
Glock 17Pr​o
Posté le 25-07-2009 à 11:22:15  profilanswer
 

ça serait quoi la bonne méthode donc

n°1908491
Un Program​meur
Posté le 25-07-2009 à 11:52:30  profilanswer
 

Il n'y a pas une bonne méthode pour comparer deux doubles.  Il faut regarder le contexte et utiliser quelque chose de sensé pour celui-ci.  Si tu dépends de la transitivité, l'utilisation de == est la seule possibilité et tu as intérêt à ne pas avoir de problème d'approximation ou d'arrondi.  Si tu en as, quelque chose comme

 
Code :
  1. abs(f1-f2) <= K*epsilon*(abs(f1)+abs(f2))
 

où tu choisis K correctement tenir compte de l'importance de ceux-ci peut être la chose à utiliser.  Mais si les dénormaux entre en compte, tu vas peut-être devoir faire encore des choses plus complexes.


Message édité par Un Programmeur le 25-07-2009 à 15:51:02

---------------
The truth is rarely pure and never simple (Oscar Wilde)
n°1908513
Glock 17Pr​o
Posté le 25-07-2009 à 14:32:26  profilanswer
 

c'est  pas du tout intuitif cette ligne

n°1908523
Joel F
Real men use unique_ptr
Posté le 25-07-2009 à 15:43:09  profilanswer
 
n°1908528
Un Program​meur
Posté le 25-07-2009 à 15:52:36  profilanswer
 

Tu peux remplacer abs(f1)+abs(f2) par max(abs(f1), abs(f2))), c'est un peu plus facile à comprendre, mais risque d'être plus coûteux.
 
Les flottants sont, en première approximation, une représentation à erreur relative constante, epsilon() étant cette erreur relativement à 1.  Il faut donc comparer la différence à l'erreur potentielle sur le terme le plus grand en valeur absolue.  Le K est un multiplicateur pour tenir compte de l'accumulation des erreurs lors des calculs.


---------------
The truth is rarely pure and never simple (Oscar Wilde)
mood
Publicité
Posté le 25-07-2009 à 15:52:36  profilanswer
 

n°1908537
Glock 17Pr​o
Posté le 25-07-2009 à 16:44:30  profilanswer
 

c'est impensable de faire un exemple avec des chiffres ? là je cale rien


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

  comparer deix doubles

 

Sujets relatifs
Comparer valeurs de 3 fichiers et en afficher le resultatPHP : Comparer valeur d'un tableau
"Fusionner" deux Itératorss dans une Jspcomparer deux variables en PHP
[C#] Comparer les lignes de 2 fichiers txtComparer un caractere precis d'une chaine (variable)
comparer 3 nombresComment comparer des chaines de caractère avec une tolérance...
[VBA][Excel] comparer deux datesbatch+comparer deux repertoires+lister fichiers differents
Plus de sujets relatifs à : comparer deix doubles


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