Utiliser rand() pour générer des valeurs vraiment aléatoires dans une fonction
En C, utiliser rand() pour générer des nombres aléatoires dans une seule la fonction peut entraîner des valeurs récurrentes. Ce problème survient lorsque srand() est invoqué à plusieurs reprises avant chaque appel à rand().
Problème :
Considérez l'exemple que vous avez fourni :
string PullOne() { string pick; string choices[3] = {"BAR", "7", "cherries"}; std::srand(time(0)); pick = choices[(std::rand() % 3)]; return pick; }
Lorsque vous appelez PullOne() plusieurs fois depuis main(), vous vous attendez à des valeurs aléatoires distinctes pour pull_1, pull_2 et pull_3. Cependant, vous obtenez systématiquement des résultats identiques.
Solution :
Pour remédier à cela, déplacez l'invocation de srand() en dehors de la fonction PullOne() et placez-la une fois au début de votre programme. Ce faisant, vous initialisez le générateur de nombres aléatoires une fois, garantissant qu'une séquence véritablement aléatoire est produite pour les appels rand() suivants.
// srand() is now called only once, at program initialization. int main() { std::srand(time(0)); string pull_1, pull_2, pull_3; pull_1 = PullOne(); pull_2 = PullOne(); pull_3 = PullOne(); return 0; }
Explication :
srand () définit la graine du générateur de nombres aléatoires. Lorsque la même graine est utilisée à plusieurs reprises, le générateur produit la même séquence. En initialisant srand() une fois, la graine est cohérente tout au long du programme, conduisant à une sortie prévisible et non aléatoire de rand().
Par conséquent, il est crucial d'appeler srand() une seule fois, idéalement pendant le programme. initialisation ou au début du processus de génération de nombres aléatoires. Cela garantit la génération de nombres véritablement aléatoires au sein de votre fonction.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!