RAND(3) Manuel du programmeur Linux RAND(3)
NOM
rand, srand - Générateur de nombres aléatoires.
SYNOPSIS
#include <stdlib.h>
int rand (void);
void srand (unsigned int seed);
DESCRIPTION
La fonction rand() renvoie un entier pseudo-aléatoire
entre 0 et RAND_MAX.
La fonction srand() utilise son argument comme "graine"
pour la génération d'une nouvelle séquence de nombres
pseudo-aléatoires, qui seront fournis par rand(). Ces
séquences sont reproductibles en appelant srand() avec la
même valeur de graine.
Si aucune graine originale n'est fournie, la fonction
rand() commence en utilisant la valeur 1.
VALEUR RENVOYÉE
La fonction rand() renvoie un nombre entier entre 0 et
RAND_MAX. La fonction srand() ne renvoie aucune valeur.
NOTES
Les versions de rand() et srand() de la bibliothèque C de
Linux utilisent le même générateur de nombres aléatoires
que random() et srandom(), ainsi les bits de poids faibles
sont tout aussi imprévisibles que les bits de poids forts.
Ceci n'est pas le cas avec les anciennes implémentations
de rand(), où les bits de poids faibles n'étaient pas
"aussi aléatoires" que ceux de poids forts.
Dans Numerical Recipes in C: The Art of Scientific Comput
ing (William H. Press, Brian P. Flannery, Saul A. Teukol
sky, William T. Vetterling; New York: Cambridge University
Press, 1990 (1st ed, p. 207)), le commentaire suivant
apparaît :
"Si vous désirez engendrer un entier aléatoire
entre 1 et 10, vous devez toujours procéder ainsi :
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
et jamais ainsi :
j=1+((int) (1000000.0*rand()) % 10);
(car cette derniere version utilise les bits de
poids faibles)."
La génération de nombres aléatoires est un domaine
GNU 5 Novembre 1996 1
RAND(3) Manuel du programmeur Linux RAND(3)
complexe. Le livre Numerical Recipes in C (référence
ci-dessus) fournit une excellente présentation pratique
d'un générateur aléatoire dans le chapitre 1 (Random Num
bers).
Pour une discussion plus théorique, qui aborde également
en profondeur d'autres domaines, voir le chapitre 3 (Ran
dom Numbers) du livre de Donald E. Knuth The Art of Com
puter Programming, volume 2 (Seminumerical Algorithms),
2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing
Company, 1981.
[NDT] : Les 3 volumes de "Art of Computer Programming"
n'existent pas en version française à ma connaissance.
C'est néanmoins un ouvrage que je recommande fortement,
même si la lecture en version anglaise le rend un peu
aride...
Je ne sais pas si "Numerical Recipes in C" est disponible
en traduction francaise.
CONFORMITÉ
SVID 3, BSD 4.3, ISO 9899
VOIR AUSSI
random(3), srandom(3), initstate(3), setstate(3)
TRADUCTION
Christophe Blaess, 1997.
GNU 5 Novembre 1996 2