Entier aléatoire en C

Résolu
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 ?
Configuration: Windows XP
Firefox 2.0.0.9

2 réponses

  1. Modérateur
    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
    1. 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