srand() + orientage objet - C++ - Programmation
Marsh Posté le 15-05-2009 à 18:51:25
deja tu apprendras que rand()%N ets atroce en terme de distribution.
Regarde du coté de boost::random pour des bonnes pratiques.
Marsh Posté le 15-05-2009 à 23:01:21
Peut-être que rand()%N n'est pas très bon, mais il devrait quand même pas me sortir à chaque fois la même chose !
Marsh Posté le 17-05-2009 à 23:53:01
Bizarre :s, si le code est pas trop compliqué, donne-le, je pourrais essayer de le compiler sur plusieurs environnements pour voir si ça se répète (windows xp, mac os x...) de ton coté, regarde si ça fait pareil sur d'autres versions et/ou d'autres distrib linux (si tu peux) mais c'est très bizarre comme problème ...
Marsh Posté le 18-05-2009 à 17:16:03
Merci pour ta proposition superbob, mais c'est du code qui fait parti d'un programme qui commence à être un peu gros (plusieurs dizaines de classes) et donc c'est pas possible de le passer. Par contre je garantis que ça n'arrive pas avec windows. Mais je n'ai pas pu essayer sur d'autres distrib que xubuntu.
Marsh Posté le 18-05-2009 à 19:13:24
Bah t'as qu'à juste compiler tes deux printfs et tu verra que ça marche très bien.
Marsh Posté le 21-05-2009 à 16:25:50
N'aurais-tu pas un
Code :
|
quelque part avant ton appel de la méthode ?
Plus sérieusement, regarde si à certains endroits de ton code, tu as ou tu appelles des fonctions/methode qui pourraient faire des choses comme ça ...
Marsh Posté le 15-05-2009 à 18:30:30
Bonjour,
voilà j'ai un petit problème avec la fonction rand().
J'ai une classe dont une methode utilise rand() pour initialiser certains attributs. Mon problème est que les attributs sont toujours initialisés de la même façon. En effet, rand() me renvoie systematiquement les memes valeurs.
Or j'ai bien pensé a faire un srand(time(NULL)) au debut de mon programme. Je me suis dit que la construction des objets avait peut etre lieu avant l'appel à srand ce qui expliquerait le probleme, mais ce n'est pas le cas.
En gros dans main() j'ai
srand(time(NULL));
printf("MAIN : %i",rand()%50);
et dans ma methode :
printf("METHODE : %i",rand()%50);
J'obtiens dans la console dans cet ordre :
MAIN <un nombre toujours different>
METHODE <TOUJOURS LE MEME NOMBRE>
on dirait que le srand() dans le main n'a pas d'effet sur l'appel à rand() dans la methode. De plus, je suis sur Ubuntu. j'ai compilé sur un windows et je n'ai pas ce problème, le nombre genéré dans la methode est a chaque fois different...
Est-ce que quelqu'un a une idée ?
Je vous remercie