Scroll to navigation

drand48(3) Library Functions Manual drand48(3)

NUME

drand48, erand48, lrand48, nrand48, mrand48, mrand48, jrand48, srand48, seed48, lcong48 - generează numere pseudo-aleatorii distribuite uniform

BIBLIOTECA

Biblioteca C standard (libc, -lc)

SINOPSIS

#include <stdlib.h>
double drand48(void);
double erand48(unsigned short xsubi[3]);
long lrand48(void);
long nrand48(unsigned short xsubi[3]);
long mrand48(void);
long jrand48(unsigned short xsubi[3]);
void srand48(long seedval);
unsigned short *seed48(unsigned short seed16v[3]);
void lcong48(unsigned short param[7]);

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

Toate funcțiile prezentate mai sus:


_XOPEN_SOURCE
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE

DESCRIERE

Aceste funcții generează numere pseudo-aleatorii folosind algoritmul de congruență liniară și aritmetica numerelor întregi pe 48 de biți.

Funcțiile drand48() și erand48() returnează valori în virgulă mobilă de precizie dublă nenegativă distribuite uniform în intervalul [0,0, 1,0].

Funcțiile lrand48() și nrand48() returnează numere întregi lungi nenegative distribuite uniform în intervalul [0, 2^31).

Funcțiile mrand48() și jrand48() returnează numere întregi lungi semnate distribuite uniform în intervalul [-2^31, 2^31].

Funcțiile srand48(), seed48() și lcong48() sunt funcții de inițializare, dintre care una trebuie apelată înainte de a utiliza drand48(), lrand48() sau mrand48(). Funcțiile erand48(), nrand48() și jrand48() nu necesită apelarea mai întâi a unei funcții de inițializare.

Toate funcțiile funcționează prin generarea unei secvențe de numere întregi de 48 de biți, Xi, în conformitate cu formula congruentă liniară:


Xn+1 = (aXn + c) mod m, unde n >= 0

Parametrul m = 2^48, prin urmare, se efectuează aritmetica numerelor întregi pe 48 de biți. Dacă nu se apelează lcong48(), a și c sunt date de:


a = 0x5DEECE66D
c = 0xB

Valoarea returnată de oricare dintre funcțiile drand48(), erand48(), lrand48(), nrand48(), mrand48() sau jrand48() este calculată prin generarea mai întâi a următorului Xi pe 48 de biți din secvență. Apoi, numărul corespunzător de biți, în funcție de tipul elementului de date care urmează să fie returnat, este copiat de la biții de ordin înalt din Xi și transformat în valoarea returnată.

Funcțiile drand48(), lrand48() și mrand48() stochează ultimul Xi pe 48 de biți generat într-o memorie tampon internă. Funcțiile erand48(), nrand48() și jrand48() solicită programului apelant să asigure stocarea valorilor Xi succesive în argumentul de matrice xsubi. Funcțiile sunt inițializate prin introducerea valorii inițiale a Xi în matrice înainte de a apela funcția pentru prima dată.

Funcția de inițializare srand48() stabilește cei 32 de biți de ordin superior din Xi la argumentul seedval. Cei 16 biți de ordin inferior sunt fixați la valoarea arbitrară 0x330E.

Funcția de inițializare seed48() stabilește valoarea lui Xi la valoarea pe 48 de biți specificată în argumentul de matrice seed16v. Valoarea anterioară a lui Xi este copiată într-o memorie tampon internă, iar seed48() returnează un indicator la această memorie tampon.

Funcția de inițializare lcong48() permite utilizatorului să specifice valorile inițiale pentru Xi, a și c. Elementele de argument ale matricei param[0-2] specifică Xi, param[3-5] specifică a, iar param[6] specifică c. După ce lcong48() a fost apelată, un apel ulterior fie la srand48(), fie la seed48() va restabili valorile standard ale a și c.

ATRIBUTE

Pentru o explicație a termenilor folosiți în această secțiune, a se vedea attributes(7).

Interfață Atribut Valoare
drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() Siguranța firelor MT-Unsafe race:drand48

Funcțiile de mai sus înregistrează informații de stare globală pentru generatorul de numere aleatoare, deci nu sunt sigure pentru fire de execuție.

STANDARDE

POSIX.1-2001, POSIX.1-2008, SVr4.

CONSULTAȚI ȘI

rand(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.

10 februarie 2023 Pagini de manual de Linux 6.03