std:: rand
|
Défini dans l'en-tête
<cstdlib>
|
||
|
int
rand
(
)
;
|
||
Retourne une valeur entière pseudo-aléatoire dans l'intervalle
[
0
,
RAND_MAX
]
.
std::srand()
initialise le générateur de nombres pseudo-aléatoires utilisé par
rand()
.
Si
rand()
est utilisé avant tout appel à
std::srand()
,
rand()
se comporte comme s'il avait été initialisé avec
std::
srand
(
1
)
.
Chaque fois que
rand()
est initialisé avec
std::srand()
, il doit produire la même séquence de valeurs lors des appels successifs.
D'autres fonctions dans la bibliothèque standard peuvent appeler
rand
. Il est défini par l'implémentation quelles fonctions le font.
Il est défini par l'implémentation si
rand()
est thread-safe.
Table des matières |
Valeur de retour
Valeur intégrale pseudo-aléatoire entre 0 et RAND_MAX .
Notes
Il n'y a aucune garantie quant à la qualité de la séquence aléatoire produite.
Par le passé, certaines implémentations de
rand()
présentaient des défauts sérieux dans l'aléatoire, la distribution et la période de la séquence produite (dans un exemple bien connu, le bit de poids faible alternait simplement entre
1
et
0
entre les appels).
rand()
n'est pas recommandé pour des besoins sérieux de génération de nombres aléatoires.
Il est recommandé d'utiliser les fonctionnalités de
génération de nombres aléatoires
de C++11 pour remplacer
rand()
.
(depuis C++11)
Exemple
La fonction
bounded_rand()
ci-dessous est une version adaptée de
Debiased Modulo (Once)
.
#include <cstdlib> #include <ctime> #include <initializer_list> #include <iostream> unsigned bounded_rand(unsigned range) { for (unsigned x, r;;) if (x = rand(), r = x % range, x - r <= -range) return r; } int main() { std::srand(std::time({})); // utilise l'heure actuelle comme graine pour le générateur aléatoire const int random_value = std::rand(); std::cout << "Valeur aléatoire sur [0, " << RAND_MAX << "]: " << random_value << '\n'; for (const unsigned sides : {2, 4, 6, 8}) { std::cout << "Lancer un dé à " << sides << " faces 8 fois : "; for (int n = 8; n; --n) std::cout << 1 + bounded_rand(sides) << ' '; std::cout << '\n'; } }
Sortie possible :
Random value on [0, 2147483647]: 948298199 Roll 2-sided die 8 times: 2 2 1 2 1 1 2 2 Roll 4-sided die 8 times: 1 3 4 2 1 3 3 1 Roll 6-sided die 8 times: 3 2 1 6 6 4 4 2 Roll 8-sided die 8 times: 4 5 6 6 3 6 1 2
Voir aussi
|
(C++11)
|
produit des valeurs entières uniformément réparties sur une plage
(modèle de classe) |
|
initialise le générateur de nombres pseudo-aléatoires
(fonction) |
|
|
valeur maximale possible générée par
std::rand
(constante macro) |
|
|
génère un entier aléatoire dans la plage spécifiée
(modèle de fonction) |
|
|
Documentation C
pour
rand
|
|