Maison > développement back-end > C++ > Pourquoi les nombres aléatoires se répètent-ils dans les itérations de boucle ?

Pourquoi les nombres aléatoires se répètent-ils dans les itérations de boucle ?

Patricia Arquette
Libérer: 2024-11-05 01:00:02
original
887 Les gens l'ont consulté

Why are Random Numbers Repeating in Loop Iterations?

Répétition de nombres aléatoires dans les itérations de boucle

Considérez le problème suivant : dans une boucle qui exécute 15 itérations, la méthode dh.setDoors() est appelé. Dans setDoors(), srand(time(0)) est invoqué pour définir une graine pour la génération de nombres aléatoires. Par la suite, des nombres aléatoires sont générés à l'aide d'expressions telles que carSetter = rand()%3 1 ou decider = rand()%2 1.

La surveillance des valeurs de carSetter et de decider révèle qu'elles restent constantes tout au long de chaque itération de boucle. , mais changez entre les différentes exécutions de boucle. Ce comportement est inattendu car la boucle implique 15 itérations indépendantes, ce qui suggère que chaque valeur aléatoire doit varier.

Enquête sur la cause

Le problème vient du placement de srand( time(0)) au début de chaque itération. En réinitialisant la graine à chaque boucle, la séquence de nombres pseudo-aléatoires est effectivement fixée par la valeur constante de time(0) au sein de l'itération. Comme le temps (0) reste le même tout au long de la boucle, la même séquence de nombres aléatoires est générée.

Résoudre le problème

Pour résoudre ce problème, il est recommandé de initialisez le générateur de nombres aléatoires une seule fois, au début du programme plutôt qu'à chaque itération de boucle. Cela garantit que différentes séquences de nombres aléatoires sont utilisées pour chaque itération de boucle.

L'implémentation révisée ressemblerait à ce qui suit :

srand(time(0));  // Call srand() once at the start of the program

while (...) {
    x = rand();
    y = rand();
}
Copier après la connexion

Avec cette modification, les valeurs de x et y varieront entre itérations de boucle, produisant le comportement souhaité de différentes séquences de nombres aléatoires.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal