STL find()

tobratus Messages postés 5 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 20 septembre 2005 - 22 févr. 2005 à 07:51
tobratus Messages postés 5 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 20 septembre 2005 - 22 févr. 2005 à 08:43
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

tobratus Messages postés 5 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 20 septembre 2005
22 févr. 2005 à 07:53
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?
0
Hylvenir Messages postés 364 Date d'inscription mercredi 11 février 2004 Statut Membre Dernière intervention 5 octobre 2006 2
22 févr. 2005 à 08:34
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
0
tobratus Messages postés 5 Date d'inscription jeudi 9 mai 2002 Statut Membre Dernière intervention 20 septembre 2005
22 févr. 2005 à 08:43
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.
0
Rejoignez-nous