Maison >développement back-end >C++ >Pourquoi rand() génère-t-il les mêmes nombres et comment puis-je y remédier ?
Résolution du comportement non aléatoire de rand()
Lors de l'exécution de programmes utilisant la fonction rand(), les utilisateurs rencontrent fréquemment le problème d'obtenir une cohérence séquences numériques. Cet article étudie la source de ce comportement et propose une solution pour garantir un véritable caractère aléatoire.
La fonction rand() génère des nombres pseudo-aléatoires, qui ne sont pas intrinsèquement aléatoires mais plutôt basés sur des algorithmes spécifiques. Ces algorithmes subissent des transformations mathématiques à l'aide d'une graine ou de nombres aléatoires précédents, ce qui entraîne le caractère non aléatoire observé.
Pour surmonter ce problème, nous devons définir une graine aléatoire pour le générateur de nombres aléatoires. Ceci peut être réalisé en utilisant la fonction srand() avec un argument basé sur l'heure système ou d'autres sources non déterministes. En initialisant la graine avec une valeur différente à chaque fois, nous réinitialisons efficacement l'algorithme de génération de nombres aléatoires, garantissant ainsi un résultat plus aléatoire.
Considérons l'exemple suivant :
#include <iostream> #include <cstdlib> #include <ctime> int main() { srand((unsigned int)time(NULL)); std::cout << rand() << std::endl; return 0; }
Dans cet exemple, nous utilisons srand() avec une graine dérivée de l'heure système actuelle. À mesure que l'heure du système change continuellement, la séquence de nombres aléatoires varie également, conduisant à un véritable caractère aléatoire.
Pour plus d'informations sur le concept des générateurs de nombres pseudo-aléatoires, reportez-vous au document fourni. liens :
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!