drand48(3) | Library Functions Manual | drand48(3) |
drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - generowanie jednolicie rozłożonych liczb pseudolosowych
Standardowa biblioteka C (libc, -lc)
#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]);
Wszystkie funkcje powyżej:
_XOPEN_SOURCE
|| /* glibc >= 2.19: */ _DEFAULT_SOURCE
|| /* glibc <= 2.19: */ _SVID_SOURCE
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).
The lrand48() and nrand48() functions return nonnegative long integers uniformly distributed over the interval [0, 2^31).
The mrand48() and jrand48() functions return signed long integers uniformly distributed over the interval [-2^31, 2^31).
Funkcje srand48(), seed48() i lcong48() to funkcje inicjujące. Jedna z nich powinna zostać wywołana przed użyciem funkcji drand48(), lrand48() czy mrand48(). Funkcje erand48(), nrand48() i jrand48() nie wymagają wcześniejszego wywołania funkcji inicjującej.
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
The parameter m = 2^48, hence 48-bit integer arithmetic is performed. Unless lcong48() is called, a and c are given by:
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ść.
Funkcje drand48(), lrand48() i mrand48() przechowują ostatnią 48-bitową wartość Xi w wewnętrznym buforze. Funkcje erand48(), nrand48() i jrand48() wymagają od wywołującego je programu zapewnienia miejsca dla kolejnych wartości Xi w tablicy xsubi podanej jako argument. Te funkcje są inicjowane przez umieszczenie w tablicy początkowych wartości Xi przed pierwszym wywołaniem funkcji.
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().
Funkcja inicjująca lcong48() pozwala określić początkowe wartości dla Xi, a oraz c. Elementy tablicy param[0-2] określają Xi, param[3-5] określają a, a param[6] określa c. Po wywołaniu lcong48() każde następne wywołanie srand48() czy seed48() przywróci standardowe wartości a i c.
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.
POSIX.1-2001, POSIX.1-2008, SVr4.
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 listy dyskusyjnej manpages-pl-list@lists.sourceforge.net.
10 lutego 2023 r. | Linux man-pages 6.03 |