drand48(3) Library Functions Manual drand48(3) NAZWA drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 - generuje jednolicie rozlozone liczby pseudolosowe BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include 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 powyzej: _XOPEN_SOURCE || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE OPIS Funkcje te generuja liczby pseudolosowe korzystajac z liniowego algorytmu kongruencyjnego i 48-bitowej arytmetyki liczb calkowitych. Funkcje drand48() i erand48() zwracaja nieujemne zmiennoprzecinkowe wartosci podwojnej precyzji rownomiernie rozlozone w przedziale [0.0, 1.0). Funkcje lrand48() i nrand48() zwracaja nieujemne wartosci long integer rownomiernie rozlozone w przedziale [0, 2^31). Funkcje mrand48() i jrand48() zwracaja wartosci long integer ze znakiem rownomiernie rozlozone w przedziale [-2^31, 2^31). Funkcje srand48(), seed48() i lcong48() to funkcje inicjujace. Jedna z nich powinna zostac wywolana przed uzyciem funkcji drand48(), lrand48() czy mrand48(). Funkcje erand48(), nrand48() i jrand48() nie wymagaja wczesniejszego wywolania funkcji inicjujacej. Wszystkie te funkcje generuja ciag 48-bitowych liczb calkowitych Xi wedlug liniowego wzoru kongruencyjnego: Xn+1 = (aXn + c) mod m, gdzie n >= 0 Parametr m = 2^48, poniewaz korzystamy z 48-bitowej arytmetyki. Jesli nie wywolano lcong48(), to parametry a i c przyjmuja wartosci: a = 0x5DEECE66D c = 0xB Wartosc zwracana przez kazda z funkcji drand48(), erand48(), lrand48(), nrand48(), mrand48() czy jrand48() jest obliczana przez wygenerowanie nastepnego 48-bitowego Xi z ciagu, a nastepnie skopiowanie odpowiedniej liczby bardziej znaczacych bitow Xi, zaleznej od zwracanego typu danych, i przeksztalcenie ich w zwracana wartosc. Funkcje drand48(), lrand48() i mrand48() przechowuja ostatnia 48-bitowa wartosc Xi w wewnetrznym buforze. Funkcje erand48(), nrand48() i jrand48() wymagaja od wywolujacego je programu zapewnienia miejsca dla kolejnych wartosci Xi w tablicy xsubi podanej jako argument. Te funkcje sa inicjowane przez umieszczenie w tablicy poczatkowych wartosci Xi przed pierwszym wywolaniem funkcji. Funkcja inicjujaca srand48() wpisuje wartosc argumentu seedval do Xi, ustawiajac 32 bardziej znaczace bity. Mniej znaczacym 16 bitom zawsze nadawana jest wartosc 0x330E. Funkcja inicjujaca seed48() zmienia wartosc Xi na 48-bitowa wartosc podana w argumencie tablicowym seed16v. Poprzednia wartosc Xi jest kopiowana do wewnetrznego bufora, a wskaznik do tego bufora jest zwracany przez funkcje seed48(). Funkcja inicjujaca lcong48() pozwala okreslic poczatkowe wartosci dla Xi, a oraz c. Elementy tablicy param[0-2] okreslaja Xi, param[3-5] okreslaja a, a param[6] okresla c. Po wywolaniu lcong48() kazde nastepne wywolanie srand48() czy seed48() przywroci standardowe wartosci a i c. ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +------------------------+--------------------------+------------------+ |Interfejs | Atrybut | Wartosc | +------------------------+--------------------------+------------------+ |drand48(), erand48(), | Bezpieczenstwo watkowe | MT-niebezpieczne | |lrand48(), nrand48(), | | race:drand48 | |mrand48(), jrand48(), | | | |srand48(), seed48(), | | | |lcong48() | | | +------------------------+--------------------------+------------------+ Powyzsze funkcje zapisuja globalne informacje o stanie generatora liczb losowych, tak wiec nie sa bezpieczne dla watkow. STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, SVr4. ZOBACZ TAKZE rand(3), random(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: Adam Byrtek , Andrzej Krzysztofowicz , Robert Luberda i Michal Kulach Niniejsze tlumaczenie jest wolna dokumentacja. Blizsze informacje o warunkach licencji mozna uzyskac zapoznajac sie z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje sie ZADNEJ ODPOWIEDZIALNOSCI. Bledy w tlumaczeniu strony podrecznika prosimy zglaszac na adres listy dyskusyjnej . Linux man-pages 6.15 17 maja 2025 r. drand48(3)