rand
|
Défini dans l'en-tête
<stdlib.h>
|
||
|
int
rand
(
)
;
|
||
Retourne une valeur entière pseudo-aléatoire entre
0
et
RAND_MAX
(
0
et
RAND_MAX
inclus).
srand()
initialise le générateur de nombres pseudo-aléatoires utilisé par
rand()
.
Si
rand()
est utilisé avant tout appel à
srand()
,
rand()
se comporte comme s'il était initialisé avec
srand
(
1
)
.
Chaque fois que
rand()
est initialisé avec
srand()
, il doit produire la même séquence de valeurs.
rand()
n'est pas garanti d'être thread-safe.
Table des matières |
Paramètres
(aucun)
Valeur de retour
Valeur entière pseudo-aléatoire entre 0 et RAND_MAX , inclusivement.
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 concernant 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, comme la cryptographie.
POSIX exige que la période du générateur de nombres pseudo-aléatoires utilisé par
rand
soit d'au moins
2
32
.
POSIX a proposé une version thread-safe de rand appelée
rand_r
, qui est obsolète en faveur de la famille de fonctions
drand48
.
Exemple
#include <stdio.h> #include <stdlib.h> #include <time.h> int main(void) { srand(time(NULL)); // utiliser l'heure actuelle comme graine pour le générateur aléatoire int random_variable = rand(); printf("Random value on [0,%d]: %d\n", RAND_MAX, random_variable); // lancer un dé à 6 faces 20 fois for (int n=0; n != 20; ++n) { int x = 7; while(x > 6) x = 1 + rand()/((RAND_MAX + 1u)/6); // Note : 1+rand()%6 est biaisé printf("%d ", x); } }
Sortie possible :
Random value on [0,2147483647]: 448749574 3 1 3 1 4 2 2 1 3 6 4 4 3 1 6 2 3 2 6 1
Références
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.22.2.1 La fonction rand (p: 252)
- Norme C11 (ISO/CEI 9899:2011) :
-
- 7.22.2.1 La fonction rand (p: 346)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 7.20.2.1 La fonction rand (p: 312)
- Norme C89/C90 (ISO/IEC 9899:1990) :
-
- 4.10.2.1 La fonction rand
Voir aussi
|
initialise le générateur de nombres pseudo-aléatoires
(fonction) |
|
|
valeur maximale possible générée par
rand
(
)
(constante macro) |
|
|
Documentation C++
pour
rand
|
|