Pourquoi dois-je obtenir le même résultat avec rand() à chaque fois que je le compiler et de l'exécuter?
Chaque fois que j'exécute ce code, j'obtiens le même résultat.
Programme
#include<stdlib.h>
int main(int agrc, const char *argv[]) {
int i = rand();
printf("%d\n",i);
for(i=0;i<10;i++) {
printf("%d\n",rand());
}
}
Résultat:
41
18467
6334
26500
19169
15724
11478
29358
26962
24464
5705
J'ai couru ce sur mingw
. En fait, je suis en train d'apprendre Objective-C
S'il vous plaît aider moi.
Obligatoire xkcd référence: xkcd.com/221
stackoverflow.com/questions/1694827/random-float-number-help
Personnellement, j'aime prendre un tas de nombres aléatoires première chose le matin à partir de random.org tellement que j'en ai à la main quand j'ai besoin d'un bon nombre aléatoire. J'aime faire de même avec les Guid.
"quand j'ai besoin d'un bon nombre aléatoire" si seulement le nombre de célibataires a pu être quantifié sur leur caractère aléatoire ... 🙂
Eh bien, si vous regardez la représentation binaire d'un nombre, et réfléchir à de 1 et de 0 en tant que pièce de retournement des résultats, alors oui, vous pourriez être en mesure d'avoir facteur aléatoire. À défaut, nous pourrions l'utiliser à la comédie valeur du numéro, la partie la plus comique étant de 42.
stackoverflow.com/questions/1694827/random-float-number-help
Personnellement, j'aime prendre un tas de nombres aléatoires première chose le matin à partir de random.org tellement que j'en ai à la main quand j'ai besoin d'un bon nombre aléatoire. J'aime faire de même avec les Guid.
"quand j'ai besoin d'un bon nombre aléatoire" si seulement le nombre de célibataires a pu être quantifié sur leur caractère aléatoire ... 🙂
Eh bien, si vous regardez la représentation binaire d'un nombre, et réfléchir à de 1 et de 0 en tant que pièce de retournement des résultats, alors oui, vous pourriez être en mesure d'avoir facteur aléatoire. À défaut, nous pourrions l'utiliser à la comédie valeur du numéro, la partie la plus comique étant de 42.
OriginalL'auteur Sumit M Asok | 2009-11-23
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour amorcer la fonction rand avec un numéro unique avant de pouvoir être utilisé. La méthode la plus simple est d'utiliser
time()
Par exemple
La raison en est que les nombres aléatoires fournies par rand() (ou tout autre algorithme de fonction) ne sont pas aléatoires. La fonction rand prend juste sa numériques actuelles de l'état, applique une transformation, enregistre le résultat de la transformation que le nouvel état et renvoie la nouvelle état.
De sorte à obtenir rand pour revenir pseudo différent de nombres aléatoires, vous devez d'abord définir l'état de rand() pour quelque chose d'unique.
La fonction
time
prend un pointeur vers untime_t
objet. Nesrand(time(NULL));
à la place. Et sachez que plusieurs appels àtime(NULL)
dans la même seconde toutes renvoient la même valeur.OriginalL'auteur Yacoby
Vous souhaitez initialiser le GÉNÉRATEUR.
Initialiser une fois (généralement à l'intérieur de
main()
) avec un appel à lasrand()
fonction.Si vous n'initialisez pas le PRNG, la valeur par défaut est de l'avoir initialisé avec la valeur
1
. Bien sûr, l'initialisation avec la valeur de la constante ne sera pas vous donner les différents pseudo-aléatoires de numéros pour les différents points du programme.Vous devez l'initialiser avec une valeur qui change à chaque exécution du programme. La valeur retournée par la
time()
fonction est la valeur la plus souvent utilisée.Le problème avec
time(NULL)
est qu'il renvoie la même valeur à la même seconde. Donc, si vous appelez votre programme à deux reprises à 11:35:17 de la même journée, vous obtiendrez la même pseudo-aléatoire de nombres.OriginalL'auteur pmg
Juste pour ajouter à Yacoby réponse - j'ai été un peu surpris qu'il ne l'est pas par défaut de la base de graines de, j'ai donc regardé le page de man:
Donc, si vous modifiez votre code pour utiliser
seed(1)
vous devriez toujours voir la même sortie maisseed(time())
va la faire changer à chaque fois.OriginalL'auteur Jon Skeet
La sortie de rand est pseudo-aléatoire, ce qui signifie qu'il ressemble effectivement aléatoire, mais est calculée de la même façon à chaque fois, à partir d'une valeur spéciale appelée la graine. Avec la même valeur de départ, vous obtenez la même séquence de nombres aléatoires.
Pour définir un autre semences, l'utilisation de la norme C de la fonction void srand(unsigned int) une fois dans votre code avant de vous commencer à générer des nombres aléatoires. Une façon courante de l'obtention d'une séquence de nombres aléatoires chaque fois que vous exécutez le programme est à la base de la graine à l'heure de l'horloge. E. g. srand(clock())
OriginalL'auteur Mike B