Provided by: manpages-fr-dev_4.19.0-7_all bug

NOM

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

BIBLIOTHÈQUE

       Bibliothèque C standard (libc, -lc)

SYNOPSIS

       #include <stdlib.h>

       int rand(void);
       void srand(unsigned int graine);

       [[deprecated]] int rand_r(unsigned int *seedp);

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

       rand_r() :
           Depuis la glibc 2.24 :
               _POSIX_C_SOURCE >= 199506L
           glibc 2.23 et antérieures
               _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 mathématique [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.

       La fonction rand() n'est pas réentrante, car elle utilise un état caché modifié  à  chaque
       appel.  Il peut s'agir simplement de la valeur de graine aléatoire pour l'appel suivant ou
       de quelque chose de plus compliqué. Afin d'obtenir un comportement reproductible dans  une
       application  threadée,  cet état doit être explicite ; cela peut être fait en utilisant la
       fonction réentrante 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 │
       └────────────────────────────────────────────────────────┴──────────────────────┴─────────┘

STANDARDS

       Les  fonctions  rand()  et  srand()  sont  conformes à SVr4, 4.3BSD, 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. Quand la graine est -1, le programme utilise une graine
       aléatoire.

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

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

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

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

               if (seed == -1) {
                   seed = arc4random();
                   printf("graine : %u\n", graine);
               }

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

               exit(EXIT_SUCCESS);
           }

VOIR AUSSI

       drand48(3), random(3)

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>, David Prévot <david@tilapin.org> et bubu <bubub@no-log.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⟩.