OVH Cloud OVH Cloud

Nombre aléatoire

2 réponses
Avatar
Pascal
Bonjour,

J'essaye de générer des nombres aléatoires en C++, ce qui marche moyen. si
je fais :
srand ( time(NULL) );
cout << ((int)(20.0 * rand()/(RAND_MAX+1.0)));
srand ( time(NULL) + (int)(20.0 * rand()/(RAND_MAX+1.0)));
cout << (int)(20.0 * rand()/(RAND_MAX+1.0)) << endl;

J'obtiens par exemple :
19 5
19 5
19 5
19 5
en l'executant rapidement.

Si j'attends (1 sec environ), j'obtiens bien
des nombres aléatoires.
11 2
0 6
7 8
...

Comment faire?

2 réponses

Avatar
Jean-Marc Bourguet
Pascal writes:

[srand(time(NULL)); avant chaque appel a rand()]
Comment faire?


Il ne faut faire qu'*un* srand par execution (et c'est une bonne idee
de logger la valeur qui a servit et d'avoir une option pour specifier
la valeur qu'on veut a la place de time(NULL)... ca aide pas mal a
avoir des resultats reproduisibles pour les tests et le debug).

A+

--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org

Avatar
Anthony Fleury
Pascal wrote:

Bonjour,


Bonjour,

J'essaye de générer des nombres aléatoires en C++, ce qui marche moyen. si
je fais :
srand ( time(NULL) );
cout << ((int)(20.0 * rand()/(RAND_MAX+1.0)));
srand ( time(NULL) + (int)(20.0 * rand()/(RAND_MAX+1.0)));
cout << (int)(20.0 * rand()/(RAND_MAX+1.0)) << endl;

J'obtiens par exemple :
19 5
19 5
en l'executant rapidement.

Comment faire?


Ne pas réinitialiser le générateur à chaque fois...
Le srand() sert à initialiser le générateur de nombre aléatoire à partir
d'une valeur qui est ici time(NULL) par exemple pour le premier. Ici il y a
de forte chance que le générateur soit repartie du même germe à chaque
fois, donc on a logiquement la même valeur en premier (vu que le générateur
est pseudo aléatoire).

Anthony
--
Alan Turing thought about criteria to settle the question of whether
machines can think, a question of which we now know that it is about as
relevant as the question of whether submarines can swim.
-- Dijkstra