rand(3) Library Functions Manual rand(3) NUME rand, rand_r, srand - generator de numere pseudo-aleatorii BIBLIOTECA Biblioteca C standard (libc, -lc) REZUMAT #include int rand(void); void srand(unsigned int seed); [[depreciat]] int rand_r(unsigned int *seedp); Cerine pentru macrocomenzi de testare a caracteristicilor pentru glibc (consultai feature_test_macros(7)): rand_r(): Incepand cu glibc 2.24: _POSIX_C_SOURCE >= 199506L glibc 2.23 i versiunile anterioare: _POSIX_C_SOURCE DESCRIERE Funcia rand() returneaza un numar intreg pseudo-aleatoriu in intervalul de la 0 la RAND_MAX inclusiv (adica intervalul matematic [0, RAND_MAX]). Funcia srand() stabilete argumentul sau ca samana pentru o noua secvena de numere intregi pseudo-aleatorii care va fi returnata de rand(). Aceste secvene pot fi repetate prin apelarea srand() cu aceeai valoare de samana. In cazul in care nu este furnizata nicio valoare de samana, funcia rand() este alimentata automat cu o valoare de 1. Funcia rand() nu este reentranta, deoarece utilizeaza o stare ascunsa care este modificata la fiecare apel. Aceasta ar putea fi doar valoarea iniiala care va fi utilizata de urmatorul apel sau ar putea fi ceva mai elaborat. Pentru a obine un comportament reproductibil intr-o aplicaie cu fire de execuie, aceasta stare trebuie sa fie explicita; acest lucru poate fi realizat cu ajutorul funciei reentrante rand_r(). Ca i rand(), rand_r() returneaza un numar intreg pseudo-aleatoriu in intervalul [0, RAND_MAX]. Argumentul seedp este un indicator catre un unsigned int care este utilizat pentru a stoca starea intre apeluri. Daca rand_r() este apelat cu aceeai valoare iniiala pentru numarul intreg indicat de seedp, iar aceasta valoare nu este modificata intre apeluri, atunci va rezulta aceeai secvena pseudo-aleatorie. Valoarea indicata de argumentul seedp din rand_r() ofera doar o cantitate foarte mica de stare, astfel incat aceasta funcie va fi un generator pseudo-aleatoriu slab. Incercai in schimb drand48_r(3). VALOAREA RETURNATA Funciile rand() i rand_r() returneaza o valoare cuprinsa intre 0 i RAND_MAX (inclusiv). Funcia srand() nu returneaza nicio valoare. ATRIBUTE Pentru o explicaie a termenilor folosii in aceasta seciune, a se vedea attributes(7). +--------------------------------------+---------------------+---------+ |Interfaa | Atribut | Valoare | +--------------------------------------+---------------------+---------+ |rand(), rand_r(), srand() | Sigurana firelor | MT-Safe | +--------------------------------------+---------------------+---------+ VERSIUNI Versiunile de rand() i srand() din biblioteca Linux C utilizeaza acelai generator de numere aleatoare ca i random(3) i srandom(3), astfel incat biii de ordin inferior ar trebui sa fie la fel de aleatori ca i cei de ordin superior. Cu toate acestea, in implementarile mai vechi ale rand() i in implementarile actuale pe diferite sisteme, biii de ordin inferior sunt mult mai puin aleatori decat cei de ordin superior. Nu utilizai aceasta funcie in aplicaii destinate sa fie portabile atunci cand este necesar un bun caracter aleatoriu; (utilizai in 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. Obsoleta in POSIX.1-2008. EXEMPLE POSIX.1-2001 ofera urmatorul exemplu de implementare a rand() i srand(), posibil util atunci cand este nevoie de aceeai secvena pe doua maini 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; } Urmatorul program poate fi utilizat pentru a afia secvena pseudo-aleatoare produsa de rand() atunci cand i se da o anumita samana. Atunci cand samana este -1, programul utilizeaza o samana aleatoare. #include #include int main(int argc, char *argv[]) { int r; unsigned int seed, nloops; if (argc != 3) { fprintf(stderr, "Utilizare: %s \n", argv[0]); exit(EXIT_FAILURE); } seed = atoi(argv[1]); nloops = atoi(argv[2]); if (seed == -1) { seed = arc4random(); printf("samana: %u\n", seed); } srand(seed); for (unsigned int j = 0; j < nloops; j++) { r = rand(); printf("%d\n", r); } exit(EXIT_SUCCESS); } CONSULTAI I drand48(3), random(3) TRADUCERE Traducerea in limba romana a acestui manual a fost facuta de Remus- Gabriel Chelu Aceasta traducere este documentaie gratuita; citii Licena publica generala GNU Versiunea 3 sau o versiune ulterioara cu privire la condiii privind drepturile de autor. NU se asuma NICIO RESPONSABILITATE. Daca gasii erori in traducerea acestui manual, va rugam sa trimitei un e-mail la . Pagini de manual de Linux 6.06 31 octombrie 2023 rand(3)