Je fais un exercice de livre qui dit écrire un programme qui génère des numéros PsueDorandom. J'ai démarré simple avec. J'ai remarqué que chaque fois que le programme était exécuté, il y aurait la même sortie "aléatoire". Donc, j'ai examiné les générateurs de nombres aléatoires et j'ai décidé d'essayer d'ensemencer en y compris celui-ci d'abord à Randint (). P> qui vient de générer le même numéro (je me sens stupide maintenant pour la mise en oeuvre.) p> alors je pensais que je serais intelligent et implémenter la graine comme celle-ci. p> Ceci a fait la même chose que le Le programme a fait en premier lieu, mais a suscité un ensemble de nombres différent (ce qui a du sens puisque le premier nombre généré par Rand () est toujours 41.) P> la seule chose que je pouvais penser à rendre cela plus aléatoire est de: p> suis-je dans ma tête et dois-je m'arrêter maintenant? L'option 2 est-elle difficile à mettre en œuvre? Toute autre idée? P> Merci d'avance. P> p>
5 Réponses :
L'option 2 n'est pas difficile, voici:
srand(time(NULL));
Vous pouvez également lire dans / dev / dev / aléatoires si vous êtes dans un environnement * Nix; Mais je suis d'accord avec le jeton, il s'agit d'une pratique standard pour définir Srand avec la fonction de temps.
Aussi, appelez Srand () dans la principale près du sommet depuis que vous ne devriez l'appeler qu'une fois. Ne l'appelez pas à chaque fois que vous générez un nouveau numéro.
Le point ici est que pour une graine donnée, Rand () produira la même séquence de nombres aléatoires. Donc, si vous souhaitez une séquence différente de nombres aléatoires chaque fois que votre programme est exécuté, vous devez fournir une graine différente à chaque course. C'est le point d'utiliser l'heure actuelle comme la graine.
Il est courant de semer le générateur de nombres aléatoires avec l'heure actuelle. Essayez: p>
srand (heure (null)); p>
srand () ne doit être utilisé qu'une seule fois:
Le problème est que si vous ne grignez pas le générateur, il se grincera avec Quand vous essayez de GRAINe avec un nombre aléatoire utilisant p> Vous faites en effet: p> comme Figbug mentionné , en utilisant le temps nécessaire pour semer le générateur est couramment utilisé. P> < / p> 0 code> (comme si srand (0) code> a été appelé). Les PRNG sont conçus pour générer la même séquence lors de l'ensemencement de la même manière (en raison du fait que les PNRG ne sont pas vraiment aléatoires, ce sont des algorithmes déterministes et peut-être un peu parce qu'il est assez utile pour les tests).
En fait, la valeur de la graine initiale est 1: "si rand () code> est appelé avant tout appel de SRAND code> est effectué, la même séquence doit être générée comme lorsque Srand code> est d'abord appelé avec une valeur de graine de 1. " opengroup.org/onlinePubs/000095399/fonctions/srand.html
Je pense que le point de ces articles est d'avoir une option pour mettre en œuvre l'algorithme qui est en rand () et non comment la graver efficacement. P>
Les nombres aléatoires produisant (pseudo) sont non triviaux et méritent d'enquêter sur différentes techniques de leur générer. Je ne pense pas que simplement utiliser Rand () est ce que les auteurs avaient à l'esprit. P>