dwww Home | Manual pages | Find package

rand(3)                    Library Functions Manual                    rand(3)

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 seed);

       [[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() :
           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 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  com-
       pliqué.  Afin d'obtenir un comportement reproductible dans une applica-
       tion 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'inter-
       valle [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  va-
       leur.

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
       The functions rand()  and srand()  conform to SVr4,  4.3BSD,  C99,  PO-
       SIX.1-2001.  The  function rand_r()  is from POSIX.1-2001. POSIX.1-2008
       marks rand_r()  as obsolete.

NOTES
       Les versions de rand() et srand() de la bibliothèque C  de  Linux  uti-
       lisent  le même générateur de nombres aléatoires que random(3) et sran-
       dom(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  sys-
       tè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;
           }

       The following program can be used to display the pseudo-random sequence
       produced  by rand()  when given a particular seed. When the seed is -1,
       the program uses a random seed.

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

           int
           main(int argc, char *argv[])
           {
               int           r;
               unsigned int  seed, 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("seed: %u\n", seed);
               }

               srand(seed);
               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  Chris-
       tophe  Blaess  <https://www.blaess.fr/christophe/>, Stéphan Rafin <ste-
       phan.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.cou-
       lon@wanadoo.fr>,  Julien  Cristau <jcristau@debian.org>, Thomas Huriaux
       <thomas.huriaux@gmail.com>, Nicolas François  <nicolas.francois@centra-
       liens.net>,  Florentin  Duneau <fduneau@gmail.com>, Simon Paillard <si-
       mon.paillard@resel.enst-bretagne.fr>,   Denis   Barbier    <barbier@de-
       bian.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⟩.

Pages du manuel de Linux 6.03   5 février 2023                         rand(3)

Generated by dwww version 1.15 on Sat Jun 29 00:40:25 CEST 2024.