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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
srand(time(NULL));
int i = 4*rand()/((float)RAND_MAX);
... et je me retrouve toujours avec la même valeur de i !
Si par contre j'écris :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
srand(time(NULL));
for (int i = 0; i < 20; ++i)
{
    cout << (int)(4*rand()/((float)RAND_MAX)) << endl;
}
... j'ai toujours le même nombre en premier, mais les autres changent d'une exécution à l'autre.

Si j'affiche juste rand() :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
srand(time(NULL));
cout << rand() << endl
return 0;
... ça me donne : 14010, 14039, 14066, ... Pas si aléatoire que ça

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.