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