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
Patricia Arquetteoriginal
2024-11-05 01:00:02873parcourir

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();
}

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!

Déclaration:
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