Entier aléatoire en C

Résolu
Cthul -  
 Cthul -
Bonjour,
j'ai un petit problème de timing en C, je m'explique.

Voilà le bout code important de ma fonction main :


for(i=0;i<32;i++){
r = hasard();
t = r;
while(r==t){ r = hasard(); printf("%d\n",r);}
if(r>t) ech(pak,t,r);
else ech(pak,r,t);
}


En gros, je veux tirer deux nombres aléatoires differents
au moyen de ma fonction hasard().
La voici :


int hasard(){
int r, i;
srand (time (NULL));

r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
return r;
}


C'est une fonction de génération d'un entier aléatoire entre 1 et 32
tout ce qu'il y a de plus classique.



Le problème vient, je pense, de srand qui se base sur l'horloge.
Ainsi, quand je rentre dans ma boucle, le nombre aléatoire
reste le même pendant 1 seconde ce ralenti mon programme.

Que dois-je faire ?

2 réponses

kilian Messages postés 8732 Date d'inscription   Statut Modérateur Dernière intervention   1 526
 
Salut,

J'ai eu le même problème que toi il y a quelques temps.
Dis moi ce que tu penses de cette solution:
http://www.commentcamarche.net/faq/sujet 7070 generer des nombres aleatoires efficacement
0
Cthul
 
Ca pourrait marcher mais je n'ai franchement pas envie de trouver
autre que time pour faire la seed ^^

J'ai trouver une solution pas très esthétique mais qui fonctionne.
J'ai supprimer ma fonction hasard et ai rajouter le code directement dans le main.

Ca donne ça :

for(i=0;i<32;i++){
r = 1+(int)((double)rand()*(32)/(RAND_MAX+1));
t = r;
while(r==t){r = 1+(int)((double)rand()*(32)/(RAND_MAX+1)); printf("%d\n",r);}
if(r>t) pak = ech(pak,t,r);
else pak = ech(pak,r,t);
}


Je pense que faire appel à rand() directement donne de meilleur résultat...

Merci quand même, cette page ma inspiré ^^
0