Aléatoire Valeur Booléenne
Je suis en train de générer de façon aléatoire un int qui est soit 0 ou 1 en C++. Maintenant, je reçois un 0 à chaque fois que j'exécute ce code, et je ne suis pas sûr pourquoi. Quel est le problème ici?
#include <ctime>
#include <cstdlib>
srand(time(0));
int randomval = rand() % 2;
cout << randomval << endl;
- Combien de fois avez-vous exécuter?
- Voir ideone.com/HuQS3 , j'ai obtenu un 1
- Essayez de mettre les deux dernières lignes dans une boucle et de l'impression de plusieurs valeurs.
- Il me rappelle un jeter une pièce de monnaie, application pour iPhone.
- Ce cas de test n'est pas encore valide; vous n'avez pas de bloc de fonction. Si vous utilisez un autre programme. Comment pouvons-nous analyser si on ne peut même pas le voir?
Vous devez vous connecter pour publier un commentaire.
Il est appelé à la malchance. Essayez de nouveau.
for
boucle dans le cas de test vous nous avez montré...srand()
à chaque itération? Ensuite, il devrait y ai gardé le même nombre jusqu'à la seconde suivante.time()
va changer à l'intérieur de cette boucle?Je sais que c'est une vieille question, mais je crois que cela répond à la question correctement.
Ne pas re-seed, le générateur à chaque fois que vous exécutez le code.
Par semis à la même valeur à chaque fois, vous êtes juste en va de même de "aléatoire" nombre. Rappelez-vous ceci est un générateur de nombres Pseudo Aléatoires, sur la base de la valeur de départ, un "aléatoire" nombre sera généré. Donc, si vous avez des semences avec le même nombre à chaque fois que vous êtes juste va obtenir le même nombre à chaque fois.
La solution est d'appeler srand(time(NULL)) qu'une seule fois dans l'exécution du programme. Ensuite, chaque appel à rand() te donne un nombre différent à chaque fois.
Sur la théorie, il y a 50% de chance que vous obtenez
0
, et 501
. Vous pouvez essayer avec différents modulo - par exemple 100, pour vérifier si cela fonctionne. Et je suis sûr qu'il n'.Vous avez juste couru ce code un peu de temps, pas assez.
Autre idée à tester:
srand
dans une boucle! Le faire au début de votre programme et de ne jamais recommencer.rand
retourne (pseudo) aléatoire de la valeur?Je tiens à ajouter que, lorsque vous utilisez
srand(time(0));
le "nombre aléatoire" sera toujours la même dans la même seconde. Quand j'ai essayé d'exécuter votre programme 10000 fois et un groupe par uniq j'ai vu que le nombre ne changera pas, à moins d'une seconde.Appel
srand(time(NULL));
juste une fois.Puis utiliser une boucle comme ceci, vous obtiendrez toujours un 0 ou un 1 de cette façon.
srand
doit être appelé.Vous ne les contrôlez pas contre quoi que ce soit. Utilisation: