Provided by: manpages-fr-dev_4.15.0-9_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.13 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  ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩  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⟩.

                                           22 mars 2021                                   RAND(3)