random(3) | Library Functions Manual | random(3) |
NUME¶
random, srandom, initstate, setstate - generator de numere aleatoare
BIBLIOTECA¶
Biblioteca C standard (libc, -lc)
SINOPSIS¶
#include <stdlib.h>
long random(void); void srandom(unsigned int seed);
char *initstate(unsigned int seed, char state[.n], size_t n); char *setstate(char *state);
random(), srandom(), initstate(), setstate():
_XOPEN_SOURCE >= 500
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE
DESCRIERE¶
Funcția random() utilizează un generator de numere aleatoare cu reacție aditivă neliniară care utilizează un tabel implicit de 31 de numere întregi lungi pentru a returna numere pseudoaleatoare succesive în intervalul 0-2^31 - 1. Perioada acestui generator de numere aleatoare este foarte mare, aproximativ 16 * ((2^31) - 1).
Funcția srandom() își stabilește argumentul ca sămânță pentru o nouă secvență de numere întregi pseudoaleatoare care va fi returnată de random(). Aceste secvențe pot fi repetate prin apelarea srandom() cu aceeași valoare de sămânță. În cazul în care nu se furnizează nicio valoare de sămânță, funcția random() este automat însămânțată cu o valoare de 1.
Funcția initstate() permite inițializarea unei matrice de stări state pentru a fi utilizată de random(). Dimensiunea matricei de stare n este utilizată de initstate() pentru a decide cât de sofisticat trebuie să fie generatorul de numere aleatoare pe care trebuie să-l utilizeze - cu cât matricea de stare este mai mare, cu atât mai bune vor fi numerele aleatoare. Valorile „optime” actuale pentru dimensiunea matricei de stări n sunt 8, 32, 64, 128 și 256 de octeți; alte valori vor fi rotunjite la cea mai apropiată valoare cunoscută. Dacă se utilizează mai puțin de 8 octeți, se produce o eroare. seed este sămânța pentru inițializare, care specifică un punct de pornire pentru secvența de numere aleatoare și asigură repornirea în același punct.
Funcția setstate() modifică matricea de stare utilizată de funcția random(). Matricea de stare state este utilizată pentru generarea numerelor aleatoare până la următorul apel al funcției initstate() sau setstate(). state trebuie mai întâi să fi fost inițializat cu ajutorul initstate() sau să fie rezultatul unui apel anterior al setstate().
VALOAREA RETURNATö
Funcția random() returnează o valoare între 0 și (2^31) - 1. Funcția srandom() nu returnează nicio valoare.
Funcția initstate() returnează un indicator la matricea de stare anterioară. În caz de eșec, aceasta returnează NULL, iar errno este configurată pentru a indica eroarea.
În caz de succes, setstate() returnează un indicator la matricea de stare anterioară. În caz de eșec, aceasta returnează NULL, iar errno este configurată pentru a indica eroarea.
ERORI-IEȘIRE¶
ATRIBUTE¶
Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).
Interfață | Atribut | Valoare |
random(), srandom(), initstate(), setstate() | Siguranța firelor | MT-Safe |
STANDARDE¶
POSIX.1-2008.
ISTORIC¶
POSIX.1-2001, 4.3BSD.
NOTE¶
Generarea numerelor aleatoare este un subiect complex. Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 2007, ed. a 3-a) oferă o discuție excelentă a problemelor practice de generare a numerelor aleatoare în capitolul 7 (Random Numbers).
Pentru o discuție mai teoretică, care acoperă în profunzime și multe aspecte practice, a se vedea capitolul 3 (Random Numbers) din The Art of Computer Programming Donald E. Knuth's, volumul 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981.
PRECAUȚII¶
Funcția random() nu ar trebui utilizată în programele cu mai multe fire de execuție în care este necesar un comportament reproductibil. Folosiți random_r(3) în acest scop.
ERORI¶
În conformitate cu POSIX, initstate() ar trebui să returneze NULL în caz de eroare. În implementarea glibc, errno este (așa cum este specificat) stabilită în caz de eroare, dar funcția nu returnează NULL.
CONSULTAȚI ȘI¶
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.
2 mai 2024 | Pagini de manual Linux (nepublicate) |