Maison >développement back-end >C++ >Pourquoi mon générateur de nombres aléatoires continue-t-il à produire la même séquence ?
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 :
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!