STL find()

Signaler
Messages postés
5
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
20 septembre 2005
-
Messages postés
5
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
20 septembre 2005
-
Voici le code que j'essaie de faire marcher:



//Code 1

vector<double> t1;

for(double k = 0.0; k<=2.0; k+=0.1)

t1.push_back(k);



vector<double>::iterator iter;

iter = find(t1.begin(),t1.end(), 1.0);



if(zero != t1.end())

cout << "Trouve: " << *zero << endl;

else

cout << "Trouve end" << endl;




//Sortie

Trouve end



Si j'utilise ce bout de code ci




//Code 2


vector<double> t1;


for(double k = 0.0; k<=2.0; k+=1.0)


t1.push_back(k);





vector<double>::iterator iter;


iter = find(t1.begin(),t1.end(), 1.0);





if(zero != t1.end())


cout << "Trouve: " << *zero << endl;


else


cout << "Trouve end" << endl;







//Sortie


Trouve 1




Quelqu'un a-t-il une explication?

3 réponses

Messages postés
5
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
20 septembre 2005

Correction...




Voici le code que j'essaie de faire marcher:



//Code 1

vector<double> t1;

for(double k = 0.0; k<=2.0; k+=0.1)

t1.push_back(k);



vector<double>::iterator iter;

iter = find(t1.begin(),t1.end(), 1.0);



if(
iter
!= t1.end())

cout << "Trouve: " << *
iter
<< endl;

else

cout << "Trouve end" << endl;




//Sortie

Trouve end



Si j'utilise ce bout de code ci




//Code 2


vector<double> t1;


for(double k = 0.0; k<=2.0; k+=1.0)


t1.push_back(k);





vector<double>::iterator iter;


iter = find(t1.begin(),t1.end(), 1.0);




if(
iter
!= t1.end())

cout << "Trouve: " << *
iter
<< endl;

else

cout << "Trouve end" << endl;








//Sortie


Trouve 1




Quelqu'un a-t-il une explication?
Messages postés
364
Date d'inscription
mercredi 11 février 2004
Statut
Membre
Dernière intervention
5 octobre 2006
2
Salut, essaye ça pour voir :

if ( ( 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 ) == 1.0 )

cout << "egaux " << endl;

else

cout << "différents" << endl;



En fait 0.1 ne peut pas se représenter dans un ordinateur, mais juste une approximation,

la somme est une approximation.

En général, dans ton cas utilise un epsilon et une différence pour tester l'égalité de double.

Knuth a du écrire un truc sur ça.

Ma participation à la saturation du net:
http://hylvenir.free.fr
Messages postés
5
Date d'inscription
jeudi 9 mai 2002
Statut
Membre
Dernière intervention
20 septembre 2005

Merci!

Je viens d'essayer avec des pointeurs double avec une implémentation
personnelle de find, et l'effet est le même . Ta réponse semble bonne.
Je vais simplement définir un find qui recherche une appx de la valeur
souhaitée.