2010-09-25 15 views
3

J'utilise cette fonction pour créer des nombres aléatoires entre 100000000 et 999999999Random Number Generator ne fonctionne pas

int irand(int start, int stop) { 
    double range = stop - start + 1; 
    return start + (int)(range * rand()/(RAND_MAX+1.0)); 
} 

Quand je l'utilise comme celui-ci, il fonctionne correctement

while(1) { 
    DWORD dw = irand(100000000, 999999999); 
    printf("dynamic key: %d\n", dw); 
    Sleep(100); 
} 

Mais quand j'utilise cette fonction sans le temps (1), je reçois toujours le même nombre. Que dois-je réparer?

+0

J'ai pensé à http://xkcd.com/221/ – citronas

+1

pourquoi la gamme est-elle double? –

Répondre

3

Le générateur de nombres aléatoires doit être ensemencé avec une source d'entropie pour que vous puissiez voir différentes séquences à chaque fois, sinon une valeur initiale de 1 est utilisée par la fonction rand. Dans votre cas, appelez srand (time(NULL)); une fois avant que la fonction irand soit appelée pour la première fois. Vous pourriez trouver cette question utile: why do i always get the same sequence of random numbers with rand() ?

+0

Je le sais, mais quand vous ajoutez srand (time (NULL)) au début de la fonction, j'obtiens aussi des résultats étranges. Il génère les mêmes nombres dans la boucle while. En dehors de la boucle pendant que je reçois des chiffres qui sont très semblables les uns aux autres (122933959, 122933916, 123016357) – Bubblegun

+1

@Bubblegun: Mettre 'srand (time (NULL))' * * ci-dessus la boucle 'while' - à savoir assurez-vous qu'il est seulement appelé une fois. Sinon, il continuera à réapparaître à la seconde en cours, ce qui se traduira par la même sortie 'rand()' jusqu'à ce que la seconde change. – Ani

+0

Ok, la boucle while fonctionne maintenant avec srand. Maintenant, je veux l'utiliser en dehors d'une boucle. Là, il génère encore des nombres similaires (en ce moment: 140869140, 140979003, 141061401). Je ne peux pas m'expliquer cela – Bubblegun

1

Pas une réponse directe à votre question, mais quelque chose que vous devriez probablement lire si vous luttez avec des nombres aléatoires. Cet article récent de notre propre Jon Skeet est une bonne intro pour les nombres aléatoires et les trubles que l'on pourrait rencontrer: http://csharpindepth.com/Articles/Chapter12/Random.aspx