Dans cet extrait de code C++ plutôt basique impliquant la génération de nombres aléatoires:
include <iostream>
using namespace std;
int main() {
cout << (Rand() % 100);
return 0;
}
Pourquoi ai-je toujours une sortie de 41? J'essaie de le faire sortir un certain nombre aléatoire entre 0 et 100. Peut-être que je ne comprends pas quelque chose sur le fonctionnement de la fonction Rand?
Vous devez "semer" le générateur. Regardez cette courte vidéo, cela clarifiera les choses.
Vous devez changer le graine .
int main() {
srand(time(NULL));
cout << (Rand() % 101);
return 0;
}
la chose srand
seeding est également valable pour un code de langue c
.
Voir aussi: http://xkcd.com/221/
Pour ce que ça vaut, vous ne générez également que des nombres entre 0 et 99 (inclus). Si vous vouliez générer des valeurs entre 0 et 100, vous en auriez besoin.
Rand() % 101
en plus d'appeler srand () comme mentionné par d'autres.
Vous ne semez pas le nombre.
Utilisez ceci:
#include <iostream>
#include <ctime>
using namespace std;
int main()
{
srand(static_cast<unsigned int>(time(0)));
cout << (Rand() % 100) << endl;
return 0;
}
Cependant, vous ne devez le semer qu'une seule fois. Fondamentalement, ne semez pas tous les nombres aléatoires.
srand()
amorce le générateur de nombres aléatoires. Sans graine, le générateur est incapable de générer les nombres que vous recherchez. Tant que le besoin de nombres aléatoires n'est pas critique pour la sécurité (par exemple, toute sorte de cryptographie), la pratique courante consiste à utiliser l'heure système comme graine en utilisant la fonction time()
à partir du <ctime>
bibliothèque en tant que telle: srand(time(0))
. Cela amorcera le générateur de nombres aléatoires avec l'heure système exprimée sous forme d'horodatage Unix (c'est-à-dire le nombre de secondes depuis la date du 1/1/1970). Vous pouvez ensuite utiliser Rand()
pour générer un nombre pseudo-aléatoire.
Voici une citation d'un question en double :
La raison en est qu'un nombre aléatoire généré à partir de la fonction Rand () n'est pas réellement aléatoire. C'est simplement une transformation. Wikipedia donne une meilleure explication de la signification du générateur de nombres pseudo-aléatoires: générateur de bits aléatoires déterministes. Chaque fois que vous appelez Rand (), il prend la graine et/ou le ou les derniers nombres aléatoires générés (la norme C ne spécifie pas l'algorithme utilisé, bien que C++ 11 ait des fonctionnalités pour spécifier certains algorithmes populaires), exécute un opération mathématique sur ces nombres, et renvoie le résultat. Donc, si l'état initial est le même à chaque fois (comme c'est le cas si vous n'appelez pas srand avec un nombre vraiment aléatoire), vous obtiendrez toujours les mêmes nombres `` aléatoires ''.
Si vous voulez en savoir plus, vous pouvez lire ce qui suit:
http://www.dreamincode.net/forums/topic/24225-random-number-generation-102/
http://www.dreamincode.net/forums/topic/29294-making-pseudo-random-number-generators-more-random/
fonctions aléatoires comme borland complier
using namespace std;
int sys_random(int min, int max) {
return (Rand() % (max - min+1) + min);
}
void sys_randomize() {
srand(time(0));
}