Bonjour,
L'autre jour, j'ai eu un petit soucis avec ces deux fonctions.
En effet, il me fallait un nombre aléatoire compris entre 0 et 4 (pour un bête test, pas dans un gros programme donc).
J'ai donc un code du style :
... et je me retrouve toujours avec la même valeur de i !Code:
1
2 srand(time(NULL)); int i = 4*rand()/((float)RAND_MAX);
Si par contre j'écris :
... j'ai toujours le même nombre en premier, mais les autres changent d'une exécution à l'autre.Code:
1
2
3
4
5 srand(time(NULL)); for (int i = 0; i < 20; ++i) { cout << (int)(4*rand()/((float)RAND_MAX)) << endl; }
Si j'affiche juste rand() :
... ça me donne : 14010, 14039, 14066, ... Pas si aléatoire que ça :?Code:
1
2
3 srand(time(NULL)); cout << rand() << endl return 0;
Je ne sais pas exactement comment fonctionnent rand() et srand(), mais je crois que srand() définit la première valeur de rand(), qui sert ensuite à calculer la suivante, et ainsi de suite.
J'aurai cru que la valeur donnée à srand() était un peu comme un indice dans un tableau de nombre aléatoires, mais il semblerai qu'il y ait une relation linéaire entre la valeur donnée à srand() et la première valeur de rand()...
C'est intentionnel ? (je ne trouve pas ça très malin, m'enfin il doit y avoir une raison)
Quelle valeur je devrais donner à srand() pour éviter ça ?
Merci d'avance pour vos conseils.
Edit : j'utilise gcc.