Maison >développement back-end >C++ >Pourquoi mon générateur de nombres aléatoires continue-t-il à produire la même séquence ?

Pourquoi mon générateur de nombres aléatoires continue-t-il à produire la même séquence ?

Patricia Arquette
Patricia Arquetteoriginal
2024-12-09 00:01:10991parcourir

Why Does My Random Number Generator Keep Producing the Same Sequence?

Réinitialisation du générateur de nombres aléatoires dans la même séquence

Chaque fois que vous exécutez un programme qui utilise la fonction rand(), vous pourriez le remarquer produit des séquences de nombres identiques. Cela se produit parce que la graine du générateur de nombres aléatoires n'est pas initialisée.

Pour produire des résultats plus imprévisibles, définissez la graine du générateur de nombres aléatoires à l'aide de srand((unsigned int)time(NULL)). Cette fonction utilise l'heure actuelle comme valeur de départ, offrant plus de variété dans les nombres générés. Considérez le code suivant :

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int random(int low, int high) {
    if (low > high)
        return high;
    return low + (rand() % (high - low + 1));
}

int main() {
    srand((unsigned int)time(NULL));
    cout << random(2, 5) << endl;
    return 0;
}

La fonction rand() n'est pas intrinsèquement aléatoire, mais utilise plutôt une transformation mathématique. Chaque appel à rand() génère un résultat basé sur la graine ou les nombres aléatoires précédents, créant une séquence prévisible sans initialisation explicite. En utilisant srand avec une valeur véritablement aléatoire (comme l'heure actuelle), l'état du générateur de nombres aléatoires devient plus imprévisible, conduisant à des résultats plus variés.

Pour plus d'informations, reportez-vous à ces ressources :

  • http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
  • h ttp://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/

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