2009-09-03 5 views
2

J'essaie de produire des entiers aléatoires (uniformément distribués). J'ai trouvé cet extrait sur un autre forum, mais il fonctionne d'une manière très bizarre ..Nombre entier aléatoire C++

srand(time(NULL)); 
    AB=rand() % 10+1; 

utilisant cette méthode, je reçois des valeurs dans un cycle si la valeur augmente avec chaque appel jusqu'à ce qu'elle tombe en panne à nouveau. Je suppose que cela a quelque chose à voir avec l'utilisation de l'heure comme initiateur? Quelque chose comme ça sort.

1 3 5 6 9 1 4 5 7 8 1 2 4 6 7. 

Je voudrais cependant d'obtenir des chiffres totalement aléatoires comme

1 9 1 3 8 2 1 7 6 7 5... 

Merci pour toute aide

Répondre

8

Vous devez appeler srand() une seule fois par programme.

+0

Ohhh, garçon que je me sens stupide ... Merci homme –

1
  • srand() doit être fait une fois par l'exécution, pas une seule fois pour chaque rand() appel,
  • certains générateurs de nombres aléatoires ont un problème avec l'aide de « chiffres bas », et il y a un biais si vous ne laissez pas tomber un certain nombre, un travail possible autour des deux questions:

    int alea(int n){ 
        assert (0 < n && n <= RAND_MAX); 
        int partSize = 
        n == RAND_MAX ? 1 : 1 + (RAND_MAX-n)/(n+1); 
        int maxUsefull = partSize * n + (partSize-1); 
        int draw; 
        do { 
         draw = rand(); 
        } while (draw > maxUsefull); 
        return draw/partSize; 
    } 
    
0

Vous pouvez utiliser le parc-Miller "norme minimale" linéaire Congruential Générateur (LCG): (graines * 16807 mod (2^31 - 1)). Mon implémentation est ici Random integers with g++ 4.4.5

La fonction srand() 'du langage C est utilisée pour définir la variable globale utilisée par' rand() '. Lorsque vous avez besoin d'une seule séquence de nombres aléatoires, 'rand()' est plus que suffisant, mais vous avez souvent besoin de plusieurs générateurs de nombres aléatoires. Pour ces cas, mon conseil serait d'utiliser C++ et une classe comme 'rand31pmc'.

Si vous voulez générer des nombres aléatoires dans une petite plage, vous pouvez utiliser l'implémentation de bibliothèque Java disponible ici: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#nextInt%28int%29

Questions connexes