Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       rand, rand_r, srand - Generateur de nombres pseudo-aleatoires

SYNOPSIS

       #include <stdlib.h>

       int rand(void);

       int rand_r(unsigned int *seedp);

       void srand(unsigned int seed);

   Exigences  de  macros  de  test de fonctionnalites pour la glibc (consultez
   feature_test_macros(7)) :

       rand_r() : _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE

DESCRIPTION

       La fonction rand()  renvoie  un  entier  pseudo-aleatoire  entre  0  et
       RAND_MAX,    bornes    incluses    (c'est-a-dire    dans   l'intervalle
       [0, RAND_MAX]).

       La fonction srand() utilise son argument  comme  << graine >>  pour  la
       generation  d'une  nouvelle  sequence de nombres pseudo-aleatoires, qui
       seront  fournis  par  rand().  Ces  sequences  sont  reproductibles  en
       appelant srand() avec la meme valeur de graine.

       Si  aucune  graine originale n'est fournie, la fonction rand() commence
       en utilisant la valeur 1.

       La fonction rand() n'est ni reentrante ni sure en contexte multithread,
       car elle utilise un etat interne modifie a chaque appel. Il peut s'agir
       simplement de la valeur de graine aleatoire pour l'appel suivant, ou il
       peut  s'agir  de  quelque  chose  de  plus complique. Afin d'obtenir un
       comportement reproductible dans une application multithread,  cet  etat
       doit  etre  stocke  dans une variable fournie explicitement ; cela peut
       etre fait en utilisant la fonction reentrante rand_r().

       Comme  rand(),  rand_r()  renvoie  un  entier   pseudo-aleatoire   dans
       l'intervalle  [0, RAND_MAX].  L'argument  seedp est un pointeur vers un
       unsigned int qui est utilise  pour  stocker  l'etat  entre  des  appels
       successifs.  Si  la  fonction  rand_r() est appelee avec la meme valeur
       initiale pour l'entier pointe par seedp, et que cette valeur n'est  pas
       modifiee entre les appels, alors la meme sequence pseudo-aleatoire sera
       generee.

       La valeur pointee par l'argument seedp de rand_r()  ne  fournit  qu'une
       donnee  tres  petite pour stocker la valeur d'etat, cette fonction sera
       donc un generateur pseudo-aleatoire faible. Essayez donc drand48_r(3) a
       sa place.

VALEUR RENVOY'EE

       Les  fonctions rand() et rand_r() renvoient un nombre entier entre 0 et
       RAND_MAX, bornes  incluses.  La  fonction  srand()  ne  renvoie  aucune
       valeur.

CONFORMIT'E

       Les  fonctions  rand()  et srand() sont conformes a SVr4, BSD 4.3, C89,
       C99,  POSIX.1-2001.  La  fonction  rand_r()  vient   de   POSIX.1-2001.
       POSIX.1-2008 marque rand_r() comme etant obsolete.

NOTES

       Les  versions  de  rand()  et  srand()  de  la  bibliotheque C de Linux
       utilisent le meme generateur de nombres  aleatoires  que  random(3)  et
       srandom(3),   ainsi   les   bits  de  poids  faibles  sont  tout  aussi
       imprevisibles que les bits de poids forts. Ceci n'est pas le  cas  avec
       les  anciennes implementations de rand() ou d'actuelles implementations
       sur des systemes differents, ou les bits de poids faibles n'etaient pas
       << aussi  aleatoires >>  que  ceux de poids forts. N'utilisez pas cette
       fonction dans des applications concues pour etre portables et lorsqu'un
       bon caractere aleatoire est necessaire. (Utilisez plutot random(3))

EXEMPLE

       POSIX.1-2001  fournit  l'exemple suivant d'une implementation de rand()
       et srand(),  potentiellement  utile  lorsqu'on  a  besoin  de  la  meme
       sequence sur deux machines differentes.

           static unsigned long suivant = 1;

           /* RAND_MAX suppose etre egal a 32767 */
           int mon_rand(void) {
               suivant = suivant * 1103515245 + 12345;
               return((unsigned)(suivant/65536) % 32768);
           }

           void mon_srand(unsigned graine) {
               suivant = graine;
           }

       Le  programme  suivant  peut  etre  utilise  pour  afficher la sequence
       pseudo-aleatoire produite par rand() avec une graine donnee.

           #include <stdlib.h>
           #include <stdio.h>
           #include <stdlib.h>

           int
           main(int argc, char *argv[])
           {
               int j, r, nloops;
               unsigned int seed;

               if (argc != 3) {
                   fprintf(stderr, "Usage: %s <seed> <nloops>\n", argv[0]);
                   exit(EXIT_FAILURE);
               }

               seed = atoi(argv[1]);
               nloops = atoi(argv[2]);

               srand(seed);
               for (j = 0; j < nloops; j++) {
                   r =  rand();
                   printf("%d\n", r);
               }

               exit(EXIT_SUCCESS);
           }

VOIR AUSSI

       drand48(3), random(3)

COLOPHON

       Cette page fait partie de  la  publication  3.27  du  projet  man-pages
       Linux.  Une description du projet et des instructions pour signaler des
       anomalies      peuvent      etre       trouvees       a       l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis  2010,  cette  traduction est maintenue a l'aide de l'outil po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone        au        sein        du       projet       perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe Blaess  <URL:http://www.blaess.fr/christophe/>  (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).   Nicolas
       Francois et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez  signaler  toute  erreur   de   traduction   en   ecrivant   a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous pouvez toujours avoir acces a la version anglaise de  ce  document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

                               13 septembre 2010                       RAND(3)