rand() et srand() en C++
Ce qui est à la base de la génération de nombres aléatoires en C++?
Est-il logique ou le principe derrière qui?
Sont les nombres générés complètement aléatoire?
Suppose que je suis en cours d'exécution de ce programme:
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int main()
{
/*
Declare variable to hold seconds on clock.
*/
time_t seconds;
/*
Get value from system clock and
place in seconds variable.
*/
time(&seconds);
/*
Convert seconds to a unsigned
integer.
*/
srand((unsigned int) seconds);
/*
Output random values.
*/
cout<< rand() << endl;
cout<< rand() << endl;
cout<< rand() << endl;
return 0;
}
Ce qu'il montre:
http://img14.imageshack.us/img14/1538/98271820.png
Il a montré 205 deux fois.
Où avez-vous trouvé les fonctions
Vous pouvez utiliser quelque chose comme /dev/random avec le
dans la classe Xie manuel dans un chapitre intitulé "les Fonctions de Bibliothèque Standard"
Déposez votre post du titre dans Google. Ensuite, prendre de "C++" et la recherche pour que. Si les résultats de la recherche ces obtenir de vous laisser vous avec des questions, de revenir et de se poser ces questions.
J'ai corrigé ton titre pour être compatible avec le code, vous êtes à la demande.
random
et randomize
?Vous pouvez utiliser quelque chose comme /dev/random avec le
<random>
en-tête.dans la classe Xie manuel dans un chapitre intitulé "les Fonctions de Bibliothèque Standard"
Déposez votre post du titre dans Google. Ensuite, prendre de "C++" et la recherche pour que. Si les résultats de la recherche ces obtenir de vous laisser vous avec des questions, de revenir et de se poser ces questions.
J'ai corrigé ton titre pour être compatible avec le code, vous êtes à la demande.
OriginalL'auteur Manoj Pandey | 2013-03-03
Vous devez vous connecter pour publier un commentaire.
À partir de la deuxième question:
Non, c'est très peu susceptible de se produire dans un ordinateur. Ils sont des "pseudo-aléatoire", des numéros, ce qui est une séquence de nombres qui varient dans la gamme au fil du temps de façon aléatoire. Mais si vous commencez avec la même "semences", vous obtenez chaque fois la même séquence. Cette prévisibilité est parfois très utile, car elle permet de répéter la même expérience plusieurs fois avec le même résultat, - de modifier les semences, permettra à un semblable exécuter pour avoir un résultat différent.
La fonction
srand
jeux de la graine. Certains systèmes ont une fonction appeléerandomize
, mais il ne fait pas partie de la norme en tant que telle. Si elle n'existe pas, il détermine la valeur à quelque chose d'inconnu pour le code, telles que le temps en millisecondes.Oui. Il existe plusieurs méthodes pour générer des pseudo-randum numéros. Simples peut être écrite en une ou deux lignes de code C utilisant des
int
oulong
types, et juste consiste à prendre la "valeur actuelle" + une constante, multiplié par certains grand nombre et modulo certains un grand nombre d'autres.Plus complexes impliquent des dizaines de lignes de plus de plutôt compliqué de mathématiques avec un grand nombre - par exemple Mersenne Twister est un travail récent qui est disponible sous forme de code source si vous chercher un peu.
randomize
. La question d'origine du titre visé àrandom
etrandomize
, mais je l'ai fixée à consulterrand
et srand " pour être en conformité avec le code. Je ne sais pas cerandomize
est (man randomize
arrive vide sur mon système), maissrand()
exige explicitement des semences argument.Si vous voulez complètement aléatoire des nombres: random.org
OriginalL'auteur Mats Petersson
La question a été essentiellement répondu dans les commentaires et une autre réponse, mais je vais les rassembler en un seul endroit.
C++
rand()
fonction produit pas vraiment d'une séquence aléatoire de numéros, mais un pseudo-aléatoire. Cela signifie que, fondamentalement, c'est un pré-définis de la séquence de nombres qui sont "aléatoire", mais fixe quelque part (en fait, c'est plus complexe que cela, mais c'est une simplification pour une meilleure compréhension). Pensez à elle comme à une longue liste d'entiers.Chaque appel à
rand()
fonction tire le nombre actuel et déplace le pointeur vers le "courant "aléatoire" nombre" à la prochaine.Ce
srand()
fonction n'est fondamentalement paramètre le pointeur à un certain endroit dans la liste. Si vous n'appelez pas lasrand()
fonction à chaque lancement, ou de l'appeler avec un paramètre fixe (graines de), vous aurez la même séquence de nombres sur chaque lancement du programme.Lors de la configuration de votre graine de secondes, si vous lancez votre programme à deux reprises à l'intérieur de cette deuxième, votre postérité sera le même donc de produire le même résultat.
Essayez le code suivant:
Vous remarquerez, que chaque "secondes" valeur correspondent à un niveau fixé de "première" de la valeur pour l'
rand()
fonction.OriginalL'auteur DarkWanderer