random(3) Library Functions Manual random(3) NAZWA random, srandom, initstate, setstate - generator liczb losowych BIBLIOTEKA Standardowa biblioteka C (libc, -lc) SKLADNIA #include long random(void); void srandom(unsigned int seed); char *initstate(size_t n; unsigned int seed, char state[n], size_t n); char *setstate(char *state); Wymagane ustawienia makr biblioteki glibc (patrz feature_test_macros(7)): random(), srandom(), initstate(), setstate(): _XOPEN_SOURCE >= 500 || /* glibc >= 2.19: */ _DEFAULT_SOURCE || /* glibc <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE OPIS Funkcja random() korzysta z generatora liczb losowych opartego na nieliniowych addytywnych przesunieciach, stosujacego domyslna tablice o rozmiarze 31 dlugich liczb calkowitych do zwracania kolejnych liczb pseudolosowych z zakresu pomiedzy 0 a 2^31 - 1. Okres tego generatora liczb losowych jest bardzo duzy, wynosi okolo 16 * ((2^31) - 1). Funkcja srandom() ustawia swoj argument jako wartosc poczatkowa dla nowego ciagu pseudolosowych liczb calkowitych zwracanych przez random(). Ciagi te sa powtarzalne przez wywolanie srandom() z ta sama wartoscia poczatkowa. Jesli nie podano wartosci poczatkowej, funkcja random() automatycznie ustawia te wartosc na 1. Funkcja initstate() pozwala na inicjacje tablicy stanow state w celu wykorzystania jej przez random(). initstate() wykorzystuje rozmiar tablicy stanow n do podjecia decyzji o tym, jakiego wymyslnego generatora liczb losowych powinna uzywac -- im wieksza tablica stanow, tym lepszy bedzie generator liczb losowych. Obecnie ,,optymalnymi" wartosciami rozmiaru n tablicy stanow sa: 8, 32, 64, 128 i 256 bajtow; inne wartosci zostana zaokraglone w dol do najblizszej z wymienionych wartosci. seed jest wartoscia poczatkowa dla inicjacji, ktora okresla punkt startu ciagu generatora liczb losowych oaz zapewnia restart w tym samym punkcie. Funkcja setstate() zmienia tablice stanow wykorzystywana przez funkcje random(). Tablica stanu state jest uzywana do generacji liczb losowych az do nastepnego wywolania initstate() lub setstate(). state musi byc uprzednio zainicjowana za pomoca initstate() lub byc wynikiem wczesniejszego wywolania setstate(). WARTOSC ZWRACANA Funkcja random() zwraca wartosci pomiedzy 0 a (2^31) - 1. Funkcja srandom() nie zwraca zadnej wartosci. Funkcja initstate() zwraca wskaznik do poprzedniej tablicy stanow. W przypadku bledu zwraca NULL i ustawia errno, wskazujac blad. Jesli zakonczy sie pomyslnie, funkcja setstate() zwraca wskaznik do poprzedniej tablicy stanow. W przypadku niepowodzenia zwraca NULL i ustawia errno, wskazujac blad. BLEDY EINVAL Argument state przekazany do setstate() byl rowny NULL. EINVAL Podano mniejsza niz 8-bajtowa tablice stanow dla initstate(). ATRYBUTY Informacje o pojeciach uzywanych w tym rozdziale mozna znalezc w podreczniku attributes(7). +---------------------------+--------------------------+---------------+ |Interfejs | Atrybut | Wartosc | +---------------------------+--------------------------+---------------+ |random(), srandom(), | Bezpieczenstwo watkowe | MT-bezpieczne | |initstate(), setstate() | | | +---------------------------+--------------------------+---------------+ STANDARDY POSIX.1-2008. HISTORIA POSIX.1-2001, 4.3BSD. UWAGI Generowanie liczb pseudolosowych jest zlozonym tematem. ,,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, wydanie 3.) w rozdziale 7 (,,Random Numbers") zawiera wybitna dyskusje o praktycznych problemach generowania liczb pseudolosowych. Bardziej teoretyczna dyskusje, takze zawierajaca szczegolowy opis wielu praktycznych problemow mozna znalezc w rozdziale 3. (,,Random Numbers" -- ,,Liczby losowe") drugiego tomu (,,Seminumerical Algorithms" -- ,,Algorytmy seminumeryczne") ksiazki Donalda E. Knutha ,,The Art of Computer Programming"; wydanie drugie; Reading, Massachusetts: Addison-Wesley Publishing Company, 1981 (tytul polski: ,,Sztuka programowania"). ZASTRZEZENIA Funkcja random() nie powinna byc uzywana w programach wielowatkowych, gdy wymagane jest, by jej zachowanie bylo powtarzalne. Do tego celu nalezy uzyc random_r(3). USTERKI Zgodnie z POSIX funkcja initstate() powinna zwrocic NULL w przypadku bledu. W implementacji glibc w razie bledu ustawiane jest errno (jak okreslono w POSIX), ale funkcja nie zwraca NULL. ZOBACZ TAKZE getrandom(2), drand48(3), rand(3), random_r(3), srand(3) TLUMACZENIE Tlumaczenie niniejszej strony podrecznika: 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.18 8 lutego 2026 r. random(3)