Vous pouvez faire
cout << rawRand % 100 << endl; // Sorties entre 0 et 99
cout << rawRand % 101 << endl; // sorties entre 0 et 100
Pour les personnes qui votent négativement; notez qu'une minute après la publication initiale, j'ai laissé le commentaire:
Depuis http://www.cplusplus.com/reference/clibrary/cstdlib/rand "Remarquez cependant que cette opération de modulo ne génère pas un nombre aléatoire véritablement uniformément réparti dans l'étendue (car dans la plupart des cas, les nombres plus bas sont légèrement plus probables), mais c'est généralement une bonne approximation pour de courtes plages".
Avec des entiers sur 64 bits et en utilisant 100 nombres en sortie, les nombres de 0 à 16 sont représentés avec 1.00000000000000000455 % des nombres (une précision relative d'environ 1%, de l'ordre de 10-18), tandis que les nombres de 17 à 99 sont représentés avec 0.99999999999999999913 % des nombres. Oui, ce n'est pas parfaitement réparti, mais une très bonne approximation pour de petites plages.
Remarquez également, où est-ce que l'OP demande des nombres uniformément distribués? Pour tout ce que nous savons, ils sont utilisés à des fins où de petites déviations n'ont pas d'importance (par ex., autre chose que la cryptographie -- et s'ils utilisent les nombres pour la cryptographie, cette question est bien trop naïve pour qu'ils écrivent leur propre cryptographie).
ÉDIT - Pour les personnes qui se soucient vraiment d'avoir une distribution uniforme de nombres aléatoires, le code suivant fonctionne. Notez que ce n'est pas nécessairement optimal car avec des entiers aléatoires sur 64 bits, il faudra deux appels à rand()
une fois tous les 10^18 appels.
unsigned N = 100; // veut des nombres de 0 à 99
unsigned long randTruncation = (RAND_MAX / N) * N;
// inclure chaque nombre les N fois en s'assurant que rawRand est entre 0 et randTruncation - 1 ou le régénérer.
unsigned long rawRand = rand();
while (rawRand >= randTruncation) {
rawRand = rand();
// avec un entier de 64 bits et une plage de 0 à 99, il sera nécessaire de générer deux nombres aléatoires
// environ 1 fois tous les (2^63)/16 ~ 10^18 fois (1 million million de fois)
// avec un entier de 32 bits et une plage de 0 à 99, il sera nécessaire de générer deux nombres aléatoires
// une fois tous les 46 millions de fois.
}
cout << rawRand % N << stdl::endl;
29 votes
Int GetRandom() { return 59; /*Un nombre parfaitement choisi au hasard*/}
5 votes
Serait-ce une référence à xkcd que je vois? :P
1 votes
Naah, je l'ai vu dans beaucoup trop d'endroits pour dire la source exacte, et de pouvoir m'abstenir d'écrire cela.
1 votes
Le temps de sommeil est exprimé en millisecondes, utilisez sleep(1000) pour dormir pendant une seconde.
0 votes
@Nikola Ce n'est pas le cas dans l'implémentation que j'utilise, c'est étrange.
0 votes
@maxpm - c'est aussi une référence à Dilbert
0 votes
@Maxpm : Pourriez-vous s'il vous plaît changer la réponse acceptée pour celle-ci ?
0 votes
@Maxpm : Génial, merci beaucoup! Je suis sûr que Justin appréciera ça. :)
0 votes
Est-ce que cette réponse satisfait votre question? Générer des nombres aléatoires uniformément sur une plage entière