Provided by: manpages-fr-dev_4.13-4_all bug

NOM

       rand, rand_r, srand - Générateur de nombres pseudoaléatoires

SYNOPSIS

       #include <stdlib.h>

       int rand(void);

       int rand_r(unsigned int *seedp);

       void srand(unsigned int seed);

   Exigences de macros de test de fonctionnalités pour la glibc (consulter feature_test_macros(7)) :

       rand_r():
           Since glibc 2.24:
               _POSIX_C_SOURCE >= 199506L
           Glibc 2.23 and earlier
               _POSIX_C_SOURCE

DESCRIPTION

       La  fonction  rand() renvoie un entier pseudoaléatoire entre 0 et RAND_MAX, bornes incluses (c'est-à-dire
       dans l'intervalle [0, RAND_MAX]).

       La fonction srand() utilise son argument comme « graine » pour la génération d'une nouvelle  séquence  de
       nombres  pseudoalé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.

       The function rand()  is not reentrant, since it uses hidden state that is modified  on  each  call.  This
       might  just  be  the  seed value to be used by the next call, or it might be something more elaborate. In
       order to get reproducible behavior in a threaded application, this state must be made explicit; this  can
       be done using the reentrant function rand_r().

       Comme  rand(),  rand_r()  renvoie  un  entier pseudoaléatoire dans l'intervalle [0, RAND_MAX]. L'argument
       seedp est un pointeur vers un unsigned  int  qui  est  utilisé  pour  stocker  l'état  entre  des  appels
       successifs.  Si  la  fonction  rand_r() est appelée avec la même valeur initiale pour l'entier pointé par
       seedp, et que cette valeur n'est pas modifiée entre les appels, alors la  même  séquence  pseudoaléatoire
       sera générée.

       La  valeur  pointée par l'argument seedp de rand_r() ne fournit qu'une donnée très petite pour stocker la
       valeur d'état, cette fonction sera donc un générateur pseudoaléatoire faible. Essayez donc drand48_r(3) à
       sa place.

VALEUR RENVOYÉE

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

ATTRIBUTS

       Pour une explication des termes utilisés dans cette section, consulter attributes(7).
       ┌───────────────────────────┬──────────────────────┬─────────┐
       │ InterfaceAttributValeur  │
       ├───────────────────────────┼──────────────────────┼─────────┤
       │ rand(), rand_r(), srand() │ Sécurité des threads │ MT-Safe │
       └───────────────────────────┴──────────────────────┴─────────┘

CONFORMITÉ

       Les  fonctions  rand()  et  srand()  sont  conformes à 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 étant obsolète.

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(3) et srandom(3), ainsi les bits de poids faible sont tout aussi imprévisibles que
       les bits de poids fort. Ceci n'est pas le cas avec les anciennes implémentations de rand() ou d'actuelles
       implémentations sur des  systèmes  différents,  où  les  bits  de  poids  faible  n'étaient  pas  « aussi
       aléatoires »  que  ceux  de  poids fort. N'utilisez pas cette fonction dans des applications conçues pour
       être portables et lorsqu'un bon caractère aléatoire est nécessaire. (Utilisez plutôt random(3))

EXEMPLES

       POSIX.1-2001 fournit l'exemple suivant d'une implémentation de rand() et srand(),  potentiellement  utile
       lorsqu'on a besoin de la même séquence sur deux machines différentes.

           static unsigned long suivant = 1;

           /* RAND_MAX supposé être égal à 32767 */
           int mon_rand(void) {
               suivant = suivant * 1103515245 + 12345;
               return((unsigned)(suivant/65536) % 32768);
           }

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

       Le programme suivant peut être utilisé pour afficher la séquence pseudoaléatoire produite par rand() avec
       une graine donnée.

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

           int
           main(int argc, char *argv[])
           {
               int 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 (int 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 5.10 du projet man-pages Linux. Une description du projet et des
       instructions  pour  signaler  des  anomalies et la dernière version de cette page peuvent être trouvées à
       l'adresse https://www.kernel.org/doc/man-pages/.

TRADUCTION

       La  traduction  française   de   cette   page   de   manuel   a   été   créée   par   Christophe   Blaess
       <https://www.blaess.fr/christophe/>,   Stéphan   Rafin   <stephan.rafin@laposte.net>,   Thierry   Vignaud
       <tvignaud@mandriva.com>, François Micaux, Alain Portal  <aportal@univ-montp2.fr>,  Jean-Philippe  Guérard
       <fevrier@tigreraye.org>,   Jean-Luc   Coulon   (f5ibh)   <jean-luc.coulon@wanadoo.fr>,   Julien   Cristau
       <jcristau@debian.org>,     Thomas     Huriaux      <thomas.huriaux@gmail.com>,      Nicolas      François
       <nicolas.francois@centraliens.net>,     Florentin     Duneau    <fduneau@gmail.com>,    Simon    Paillard
       <simon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier   <barbier@debian.org>   et    David    Prévot
       <david@tilapin.org>

       Cette  traduction  est  une  documentation libre ; veuillez vous reporter à la GNU General Public License
       version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.

       Si vous découvrez un bogue dans la traduction de cette page de manuel,  veuillez  envoyer  un  message  à
       debian-l10n-french@lists.debian.org.

                                                 1 novembre 2020                                         RAND(3)