2016-07-12 1 views
0

Je le code suivant:nombres aléatoires dans une gamme successives

#include <iostream> 
#include <cstdlib> 
#include <ctime> 

int getRandomNumber(int min,int max) 
{ 
    static const double fraction = 1.0/(static_cast<double>(RAND_MAX)+1.0); 
    return static_cast<int>(rand()*fraction*(max-min+1)+min); 
} 

int main() 
{ 
    srand(static_cast<int>(time(0))); 
    std::cout<<getRandomNumber(1,6); 
    return 0; 
} 

Si je lance ce programme succesions, puis-je obtenir le même nombre. Mais quand je lance celui-ci avec la déclaration de Cout comme:

std::cout<<getRandomNumber(1,6)<<getRandomNumber(1,6); 

Je reçois des numéros différents à chaque fois. Alors, comment est-ce possible? Est-ce que je manque quelque chose?

+0

Je lance le programme ci-dessus avec deux cout. Il donne les deux mêmes nombre que le résultat. – denis

+0

Je vous vois en utilisant un nombre entier. Il peut être généré en utilisant uniquement rand(). Pourquoi vous traverser beaucoup de problèmes. 'cout << rand() << "" << rand();' – denis

+0

Par ailleurs; getRandomNumber() peut générer au plus RAND_MAX + 1 nombres différents, indépendamment de min et max. Et il est relativement facile de prédire les nombres qui ne peuvent pas être retournés. – Loreto

Répondre

2

La fonction time() retourne le temps en secondes si le programme en cours d'exécution deux fois ou plus dans la même seconde causeront le système de nombres aléatoires à ensemencée avec exactement le même nombre.

+0

La fonction time() est utilisée dans la première fonction srand; n'est jamais utilisé, donc n'a aucune relation avec ce que nous voyons comme sortie. – denis

+2

@denis au contraire. La fonction 'time()' est utilisée dans l'appel de 'srand()' et détermine la séquence des nombres aléatoires qui seront produits par la fonction 'rand()'. Si vous appelez 'srand()' avec le même numéro, vous obtenez exactement la même séquence de nombres aléatoires de la fonction 'rand()'. – Galik

+0

Les gars, j'utilise Codeblocks. Chaque fois que j'utilise un seul appel à getRandomNumber(), j'obtiens le même numéro, comme 5. Mais quand je l'appelle deux fois, il génère deux nombres aléatoires même pendant la même seconde chaque fois que je cours, comme 56 ou 42. – DragneelFPS

0

Lors de l'utilisation de la fonction time() en tant que programme d'amorçage et en cours d'exécution dans un intervalle court, le premier résultat de rand() sera modifié en un très petit nombre comparé à RAND_MAX.

ce qui explique pourquoi vous avez obtenu le même nombre, lorsque vous utilisez fraction pour obtenir un nombre de 1 - 6.

Voici une autre façon d'obtenir le nombre aléatoire de 1 à 6, qui peut faire mieux.

rand() % 6 + 1 
+0

Celui-ci a l'air plutôt joli. Merci. – DragneelFPS