rand() renvoie toujours la même séquence de redémarrage de l'application
J'ai la méthode suivante qui génère un nombre aléatoire:
int random_number() //Random number generator
{
int x = rand() % 1000000 + 1; //Generate an integer between 1 and 1000000
return x;
}
L'appel à cette méthode est utilisée dans une boucle qui parcourt cinq fois. Le problème avec cette méthode est qu'il semble toujours à générer le même nombre lors de l'exécution du programme à plusieurs reprises. Comment cela peut-il être résolu?
srand()
peut venir dans maniable. Cependant, vous pouvez être déprimé pour prendre modulo quand/si vous découvrez 1000000 est sensiblement plus grande que la plupart de la mise en œuvre des définitions de RAND_MAX.OriginalL'auteur Matthew | 2012-11-07
Vous devez vous connecter pour publier un commentaire.
Vous devez de la graine le générateur de nombres aléatoires, telles que:
Le semis du générateur de nombres pseudo-aléatoires essentiellement décide du nombre aléatoire qu'elle va itérer. En utilisant le temps est la méthode standard de réaliser adéquatement des résultats aléatoires.
EDIT:
Pour clarifier, vous devriez semences qu'une seule fois et d'obtenir des nombres aléatoires, quelque chose comme ceci:
Plutôt que quelque chose comme:
Si vous êtes d'itération d'une boucle, ne pas appeler srand à chaque itération. L'appeler qu'une seule fois, et rand à de nombreuses reprises. Si vous appelez à la fois à chaque fois, tous les appels dans la même seconde sera de retour le même nombre (depuis le temps(NULL) retourne la même valeur).
Merci. Qui a résolu le problème 🙂
Quand je l'utilise (pour les petites plages de numéros), j'ai cohérente de la répétition, de dire que je souhaite pour obtenir un nombre aléatoire entre 0 et 5; je vais l'avoir dans la séquence de 0 à cinq reprises, 1 cinq fois, 2 cinq fois, etc.
OriginalL'auteur femtoRgon
faire un appel à
srand(time(NULL));
lorsque votre programme se lance.srand
définit une graine à la fonction rand. En lui donnant la valeur de retour detime(NULL)
aide à l'obtention d'un graines différentes à chaque exécution du programme.Que vous avez attaché votre question, comme c++, vous pouvez soit utiliser c++11 fonctionnalité pour gérer aléatoire de génération de nombre.
quels fichiers (tu parles) ?
OriginalL'auteur tomahh
femtoRgon est droit. Cela permettra d'amorcer le programme, mais jetez un oeil à la nouvelle norme c++ comme ils l'ont amélioré la génération de nombre aléatoire
voir
Les nombres aléatoires en C++0x
OriginalL'auteur gda2004
rand n'est pas vraiment un nombre aléatoire, mais plutôt un pseudo-aléatoires qui ne "ressemble" aléatoire si vous ne connaissez pas l'algorithme utilisé pour générer les valeurs. À partir de la page de man:
pseudo-aléatoire signifie que, compte tenu de la même entrée, un seed, il va donner le même résultat. C'est en fait très utile lorsque vous essayez de déboguer un problème depuis la même "aléatoire" valeurs seront renvoyés, vous permettant de reproduire le problème.
C'est mauvais si vous avez vraiment besoin de l'aléatoire.
Comme indiqué ci-dessus en changeant la graine à quelque chose de différent à chaque exécution, comme le disent de secondes depuis l'epoch, vous pouvez obtenir différentes valeurs de votre appel à rand().
Si vous essayez de déboguer vous pouvez imprimer la graine de sorte que vous pouvez reproduire les problèmes lorsqu'ils surviennent.
OriginalL'auteur Paul Rubel