Scroll to navigation

DRAND48(3) Podręcznik programisty Linuksa DRAND48(3)

NAZWA

drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - generowanie jednolicie rozłożonych liczb pseudolosowych

SKŁADNIA

#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]);

Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)):

Wszystkie funkcje powyżej: _XOPEN_SOURCE
|| /* Glibc od 2.19: */ _DEFAULT_SOURCE
|| /* Glibc w wersji <= 2.19: */ _SVID_SOURCE

OPIS

Funkcje te generują liczby pseudolosowe korzystając z liniowego algorytmu kongruencyjnego i 48-bitowej arytmetyki liczb całkowitych.

Funkcje drand48() i erand48() zwracają nieujemne zmiennoprzecinkowe wartości podwójnej precyzji równomiernie rozłożone w przedziale [0.0, 1.0).

Funkcje lrand48() i nrand48() zwracają nieujemne wartości long integer równomiernie rozłożone w przedziale [0, 2^31).

Funkcje mrand48() i jrand48() zwracają wartości long integer ze znakiem równomiernie rozłożone w przedziale [-2^31, 2^31).

The srand48(), seed48(), and lcong48() functions are initialization functions, one of which should be called before using drand48(), lrand48() or mrand48(). The functions erand48(), nrand48(), and jrand48() do not require an initialization function to be called first.

Wszystkie te funkcje generują ciąg 48-bitowych liczb całkowitych Xi według liniowego wzoru kongruencyjnego:


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

Parametr m = 2^48, ponieważ korzystamy z 48-bitowej arytmetyki. Jeśli nie wywołano lcong48(), to parametry a i c przyjmują wartości:


a = 0x5DEECE66D
c = 0xB

Wartość zwracana przez każdą z funkcji drand48(), erand48(), lrand48(), nrand48(), mrand48() czy jrand48() jest obliczana przez wygenerowanie następnego 48-bitowego Xi z ciągu, a następnie skopiowanie odpowiedniej liczby bardziej znaczących bitów Xi, zależnej od zwracanego typu danych, i przekształcenie ich w zwracaną wartość.

The functions drand48(), lrand48(), and mrand48() store the last 48-bit Xi generated in an internal buffer. The functions erand48(), nrand48(), and jrand48() require the calling program to provide storage for the successive Xi values in the array argument xsubi. The functions are initialized by placing the initial value of Xi into the array before calling the function for the first time.

Funkcja inicjująca srand48() wpisuje wartość argumentu seedval do Xi, ustawiając 32 bardziej znaczące bity. Mniej znaczącym 16 bitom zawsze nadawana jest wartość 0x330E.

Funkcja inicjująca seed48() zmienia wartość Xi na 48-bitową wartość podaną w argumencie tablicowym seed16v. Poprzednia wartość Xi jest kopiowana do wewnętrznego bufora, a wskaźnik do tego bufora jest zwracany przez funkcję seed48().

The initialization function lcong48() allows the user to specify initial values for Xi, a, and c. Array argument elements param[0-2] specify Xi, param[3-5] specify a, and param[6] specifies c. After lcong48() has been called, a subsequent call to either srand48() or seed48() will restore the standard values of a and c.

ATRYBUTY

Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).

Interfejs Atrybut Wartość
drand48(), erand48(), lrand48(), nrand48(), mrand48(), jrand48(), srand48(), seed48(), lcong48() Bezpieczeństwo wątkowe MT-Unsafe race:drand48

Powyższe funkcje zapisują globalne informacje o stanie generatora liczb losowych, tak więc nie są bezpieczne dla wątków.

ZGODNE Z

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

ZOBACZ TAKŻE

rand(3), random(3)

O STRONIE

Angielska wersja tej strony pochodzi z wydania 5.10 projektu Linux man-pages. Opis projektu, informacje dotyczące zgłaszania błędów oraz najnowszą wersję oryginału można znaleźć pod adresem https://www.kernel.org/doc/man-pages/.

TŁUMACZENIE

Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Adam Byrtek <alpha@irc.pl>, Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>

Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.

Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres manpages-pl-list@lists.sourceforge.net.

1 listopada 2020 r.