rand avec les graines ne pas retourner hasard si la fonction en boucle
J'ai écrit ce code C ci-dessous, lorsque je la boucle, elle renvoie un nombre aléatoire. Comment puis-je obtenir les 5 différentes valeurs aléatoires si myrand() est exécutée?
#include <stdio.h>
#include <stdlib.h>
int myrand() {
int ue_imsi;
int seed = time(NULL);
srand(seed);
ue_imsi = rand();
return ue_imsi;
}
int main()
{
int value = 0;
int i=0;
for (i=0; i< 5; i++)
{
value =myrand();
printf("value is %d\n", value);
}
}
Graines de une fois dans votre vie, pas tout le temps.
Vous êtes d'initialiser le générateur de nombre aléatoire avec le même nombre de nouveau (tant que
double possible de Toujours répété les chiffres donnés par rand(). Veuillez utiliser les installations de recherche de SORTE avant de poser une question.
Vous êtes d'initialiser le générateur de nombre aléatoire avec le même nombre de nouveau (tant que
time(NULL)
renvoie la même valeur). Ne faites pas si vous souhaitez que les numéros de regarder comme aléatoires. Rappelez-vous aussi de #include <time.h>
pour time()
prototype.double possible de Toujours répété les chiffres donnés par rand(). Veuillez utiliser les installations de recherche de SORTE avant de poser une question.
OriginalL'auteur xambo | 2011-11-29
Vous devez vous connecter pour publier un commentaire.
- Amorçage de la génératrice doit être fait une fois(pour chaque séquence de nombres aléatoires que vous souhaitez générer, bien sûr!):
OriginalL'auteur AraK
Déplacer le
srand()
appel enmain()
, avant la boucle.En d'autres termes, l'appel
srand()
une fois et ensuite appelerrand()
à plusieurs reprises, sans aucune demande en outre àsrand()
:Lorsque vous appelez
time()
plusieurs fois en succession rapide, il est susceptible de renvoyer la même valeur, puisque l'horloge n'est pas cochée. Lorsque vous appelezsrand()
avec la même semence, l'appel suivant àrand()
reviendra de la même valeur. Comme je l'ai dit, n'essayez pas de réinitialiser le générateur à chaque fois que vous besoin d'une valeur aléatoire.OriginalL'auteur NPE
Le point de semences() pour démarrer la séquence de nombres aléatoires avec une valeur connue,
vous serez alors toujours obtenir la même séquence de nombres tenu de la même graine.
C'est pourquoi vous avez des semences(), il vous permet de générer la même séquence pour les tests, ou d'une graine aléatoire (généralement le temps), vous obtenez un ordre différent à chaque fois
OriginalL'auteur Martin Beckett
Essayez ceci:
Mon "deviner", c'est que 10 valeurs égales doivent être imprimés 🙂
OriginalL'auteur pmg
Si vous souhaitez effectuer un réamorçage (pour supplémentaire aléatoire) chaque fois que vous appelez
random()
, voici un moyen que vous pourriez faire:time()
mises à jour une fois par seconde, mais sera différente à chaque fois que vous lancez votre programmeclock()
mises à jour beaucoup plus souvent, mais commence à 0 à chaque fois que vous lancez votre programmerandom()
permet de s'assurer que vous (en général) n'est pas réamorcer avec la même valeur deux fois de suite si votre boucle est plus rapide que la granularité declock()
Bien sûr, vous pourriez faire plus si vous avez vraiment, vraiment, voulez-aléatoire-mais c'est un début.
clock()
ne pas ajouter beaucoup de valeur ici, puisque c'est à peu près déterministe si votre programme n'a pas toutes les I/O des retards.Eh bien si vous en quelque sorte toujours obtenir 0, horloge d'ajouter au moins certains des bits supplémentaires de l'entropie, donc c'est important.
scruss.com/blog/2008/10/12/...
getpid()
serait probablement une bonne addition pour résoudre les limitations detime()
.channel9.msdn.com/Events/GoingNative/2013/...
OriginalL'auteur nobar