Provided by: manpages-ro-dev_4.27.0-1_all bug

NUME

       rand, rand_r, srand - generator de numere pseudo-aleatorii

BIBLIOTECA

       Biblioteca C standard (libc, -lc)

SINOPSIS

       #include <stdlib.h>

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

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

   Cerințe pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultați feature_test_macros(7)):

       rand_r():
           Începând cu glibc 2.24:
               _POSIX_C_SOURCE >= 199506L
           glibc 2.23 și versiunile anterioare:
               _POSIX_C_SOURCE

DESCRIERE

       Funcția  rand()  returnează  un  număr întreg pseudo-aleatoriu în intervalul de la 0 la RAND_MAX inclusiv
       (adică intervalul matematic [0, RAND_MAX]).

       Funcția srand()  stabilește  argumentul  său  ca  sămânță  pentru  o  nouă  secvență  de  numere  întregi
       pseudo-aleatorii care va fi returnată de rand(). Aceste secvențe pot fi repetate prin apelarea srand() cu
       aceeași valoare de sămânță.

       În  cazul în care nu este furnizată nicio valoare de sămânță, funcția rand() este alimentată automat cu o
       valoare de 1.

       Funcția rand() nu este reentrantă, deoarece utilizează o stare ascunsă care este  modificată  la  fiecare
       apel.  Aceasta  ar putea fi doar valoarea inițială care va fi utilizată de următorul apel sau ar putea fi
       ceva mai elaborat. Pentru a obține un comportament reproductibil într-o aplicație cu  fire  de  execuție,
       această  stare  trebuie  să  fie explicită; acest lucru poate fi realizat cu ajutorul funcției reentrante
       rand_r().

       Ca și  rand(),  rand_r()  returnează  un  număr  întreg  pseudo-aleatoriu  în  intervalul  [0, RAND_MAX].
       Argumentul  seedp  este un indicator către un unsigned int care este utilizat pentru a stoca starea între
       apeluri. Dacă rand_r() este apelat cu aceeași valoare inițială pentru numărul întreg  indicat  de  seedp,
       iar   această   valoare   nu   este   modificată  între  apeluri,  atunci  va  rezulta  aceeași  secvență
       pseudo-aleatorie.

       Valoarea indicată de argumentul seedp din rand_r() oferă doar o cantitate foarte mică  de  stare,  astfel
       încât această funcție va fi un generator pseudo-aleatoriu slab. Încercați în schimb drand48_r(3).

VALOAREA RETURNATĂ

       Funcțiile  rand()  și  rand_r()  returnează  o  valoare  cuprinsă între 0 și RAND_MAX (inclusiv). Funcția
       srand() nu returnează nicio valoare.

ATRIBUTE

       Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
       ┌─────────────────────────────────────────────────────────────────────────┬───────────────────┬─────────┐
       │ InterfațăAtributValoare │
       ├─────────────────────────────────────────────────────────────────────────┼───────────────────┼─────────┤
       │ rand(), rand_r(), srand()                                               │ Siguranța firelor │ MT-Safe │
       └─────────────────────────────────────────────────────────────────────────┴───────────────────┴─────────┘

VERSIUNI

       Versiunile de rand() și srand() din biblioteca Linux C utilizează același generator de  numere  aleatoare
       ca  și  random(3) și srandom(3), astfel încât biții de ordin inferior ar trebui să fie la fel de aleatori
       ca și cei  de  ordin  superior.  Cu  toate  acestea,  în  implementările  mai  vechi  ale  rand()  și  în
       implementările  actuale  pe  diferite sisteme, biții de ordin inferior sunt mult mai puțin aleatori decât
       cei de ordin superior. Nu utilizați această funcție în aplicații destinate să fie portabile  atunci  când
       este necesar un bun caracter aleatoriu; (utilizați în schimb random(3).)

STANDARDE

       rand()
       srand()
              C11, POSIX.1-2008.

       rand_r()
              POSIX.1-2008.

ISTORIC

       rand()
       srand()
              SVr4, 4.3BSD, C89, POSIX.1-2001.

       rand_r()
              POSIX.1-2001. Obsoletă în POSIX.1-2008.

EXEMPLE

       POSIX.1-2001  oferă  următorul exemplu de implementare a rand() și srand(), posibil util atunci când este
       nevoie de aceeași secvență pe două mașini diferite.

           static unsigned long next = 1;

           /* RAND_MAX se presupune a fi 32767 */
           int myrand(void) {
               next = next * 1103515245 + 12345;
               return((unsigned)(next/65536) % 32768);
           }

           void mysrand(unsigned int seed) {
               next = seed;
           }

       Următorul program poate fi utilizat pentru a afișa secvența pseudo-aleatoare  produsă  de  rand()  atunci
       când i se dă o anumită sămânță. Atunci când sămânța este -1, programul utilizează o sămânță aleatoare.

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

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

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

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

               if (seed == -1) {
                   seed = arc4random();
                   printf("sămânța: %u\n", seed);
               }

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

               exit(EXIT_SUCCESS);
           }

CONSULTAȚI ȘI

       drand48(3), random(3)

TRADUCERE

       Traducerea    în   limba   română   a   acestui   manual   a   fost   făcută   de   Remus-Gabriel   Chelu
       <remusgabriel.chelu@disroot.org>

       Această traducere este  documentație  gratuită;  citiți  Licența publică generală GNU Versiunea 3  sau  o
       versiune   ulterioară   cu  privire  la  condiții  privind  drepturile  de  autor.   NU  se  asumă  NICIO
       RESPONSABILITATE.

       Dacă găsiți erori în traducerea acestui manual, vă rugăm să  trimiteți  un  e-mail  la  translation-team-
       ro@lists.sourceforge.net.

Pagini de manual de Linux 6.9.1                   15 iunie 2024                                          rand(3)