Bonjour, j’ai un petit problème : dans un programme , pour générer un nombre aléatoire je fais ceci :
int n,max=50,liste[15];
for(i=0;i<15;i++) {
srand(time(0));
liste[i] = (rand() % max);
}
// On affiche la liste
et le seul problème c’est que si je lance le programme deux fois avec un intervalle très réduit (1 a 2 secondes), ca m’affiche deux fois la meme liste : il y a un problème avec la fonction aléatoire.
Srand ne sert qu’à initiliser la “graine” servant à tirer la série de nombres pseudo aléatoire. Si tu utilise la même graine, il est normal que tu tire le même nombre. donc tu initialise en dehors de la boucle comme ci-dessus. si vraiment tu a besoin de réintialiser la graine, il faut mettre un paramètre en plus de l’heure, par exemple:
srand(time(0)+i )
ou srand(time(0) + liste[i]
mais ici, ça ne sert à rien à mon avis.
Oui et non car il initialise en fonction de l’heure système celà une milliseconde doit pas s’écouler entre deux boucle sinon yen a pas bon (ya quelque chose qui fume dans le proco)
Ah Ok,
Mais de toute façon, c’est pas un bonne chose de réinitialiser la graine à chaque fois, ça ne sert à rien, et la répartition homogène de la série aléatoire n’est plus garantie.
En fait, bien souvent, c’est une erreur de copier coller pris dans un bouquin, on prend l’exemple unitaire et on pense qu’il faut systématiquement appeler les 2: srand et rand, bref…
sans compter que même si le compteur est en milliseconde, on m’a toujours appris que sur les PC, c’est loin d’être précis à la milliseconde, et si c’est au centième, dans une boucle, il est plus que probable d’avoir plusieurs exécution dans un centième de seondes. :neutre:
edit: euh, et avec un calcul: un procos à 1GHz, on a un temps de cycle de 1nanoseconde, les instructions font au pif 10 temps de cycle, alors il s’en passe des choses en 1 milliseconde.
j’ai jamais dis que c’était bien :o je donne juste un exemple pour avoir un truc plus aléatoire. Moi niveau aléatoire j’avais fait pire : tu prend l’hauteur courante de la pile (int i, j = &i + sizeof(int); et tu joue avec…