Pourquoi devons-nous faire ' srand (time (NULL)) ' pour générer des nombres aléatoires en C ++?


Meilleure réponse

Je ne peux « t donner une meilleure réponse quAbhilash Gangadharan a fourni. La fonction » srand () « du standard La bibliothèque C initialise plusieurs valeurs dont lalgorithme pseudo-aléatoire a besoin pour générer une sortie semi-unique.

Dans certains générateurs plus anciens, la valeur était directement utilisée pour démarrer le système, comme ils faisaient des choses comme modulo-prime maths avec quelques commentaires du nombre le plus récemment généré pour ajouter une « entropie » au calcul et rendre le résultat aléatoire. Les algorithmes plus modernes (comme le quelque peu célèbre « Mersenne Twister ») ont un système de rétroaction similaire, mais il est utilisé différemment pour fournir une plus grande quantité dentropie, ce qui amène la séquence de nombres générée à passer un plus grand nombre de tests statistiques pour le caractère aléatoire.

Lamorçage du PRNG avec une valeur donnée devrait toujours donner exactement le même résultat – donc si jappelle « srand (12345) » dans un certain code et quil génère « 231,4492,2131 » sur 14D EC2015, je peux obtenir exactement le même résultat sur 14DEC2016. (Ceci est en fait utilisé dans certaines parties de la cryptographie pour ajouter plus de sécurité à certains algorithmes, si je me souviens bien de mes recherches)

Réponse

Cela sappelle « graine » le générateur de nombres aléatoires . Cela vous permet de générer la même séquence de nombres aléatoires si vous utilisez une graine fixe ou si vous utilisez un paramètre système comme le temps, vous pouvez alors commencer avec une graine différente à chaque fois et avoir différentes séquences de nombres aléatoires. Cela vous aide à vérifier si le résultat de votre simulation stochastique nest pas influencé par une certaine prévisibilité dans la séquence de nombres aléatoires.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *