Provided by: manpages-pl-dev_0.7-2_all bug

NAZWA

       random, srandom, initstate, setstate - generator liczb losowych

SKŁADNIA

       #include <stdlib.h>

       long int random(void);

       void srandom(unsigned int seed);

       char *initstate(unsigned int seed, char *state, 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 od 2.19: */ _DEFAULT_SOURCE
               || /* Glibc w wersji <= 2.19: */ _SVID_SOURCE || _BSD_SOURCE

OPIS

       Funkcja   random()   korzysta   z   generatora   liczb  losowych  opartego  na  nieliniowych  addytywnych
       przesunięciach, stosującego domyślną tablicę o  rozmiarze  31  długich  liczb  całkowitych  do  zwracania
       kolejnych liczb pseudolosowych z zakresu pomiędzy 0 a RAND_MAX. Okres tego generatora liczb losowych jest
       bardzo duży, wynosi około 16 * ((2^31) - 1).

       Funkcja  srandom()  ustawia  swój  argument jako wartość początkową dla nowego ciągu pseudolosowych liczb
       całkowitych zwracanych przez random(). Ciągi te są  powtarzalne  przez  wywołanie  srandom()  z  tą  samą
       wartością  początkową.  Jeśli  nie podano wartości początkowej, funkcja random() automatycznie ustawia tę
       wartość na 1.

       Funkcja initstate() pozwala na inicjację tablicy stanów state w celu wykorzystania  jej  przez  random().
       initstate()  wykorzystuje  rozmiar  tablicy  stanów  n  do  podjęcia  decyzji  o  tym, jakiego wymyślnego
       generatora liczb losowych powinna używać — im większa tablica stanów, tym lepszy będzie  generator  liczb
       losowych.  seed  jest wartością początkową dla inicjalizacji, która określa punkt startu ciągu generatora
       liczb losowych oaz zapewnia restart w tym samym punkcie.

       Funkcja setstate() zmienia tablicę stanów wykorzystywaną przez funkcję random(). Tablica stanu state jest
       używana do generacji liczb losowych aż do następnego wywołania initstate() lub setstate(). state musi być
       uprzednio zainicjowana za pomocą initstate() lub być wynikiem wcześniejszego wywołania setstate().

WARTOŚĆ ZWRACANA

       Funkcja random() zwraca wartości pomiędzy 0 a RAND_MAX. Funkcja srandom() nie zwraca żadnej wartości.

       Funkcja initstate() zwraca wskaźnik do poprzedniej tablicy  stanów.  W  przypadku  błędu  ustawiane  jest
       errno, wskazując na przyczynę błędu.

       Jeśli  zakończy  się  pomyślnie,  funkcja  setstate()  zwraca  wskaźnik  do poprzedniej tablicy stanów. W
       przypadku błędu zwraca NULL i ustawia errno, wskazując na przyczynę błędu.

BŁĘDY

       EINVAL Argument state przekazany do setstate() był równy NULL.

       EINVAL Podano mniejszą niż 8-bajtową tablicę stanów dla initstate().

ATRYBUTY

       Informacje o pojęciach używanych w tym rozdziale można znaleźć w podręczniku attributes(7).
       ┌─────────────────────────┬────────────────────────┬─────────┐
       │ InterfejsAtrybutWartość │
       ├─────────────────────────┼────────────────────────┼─────────┤
       │ random(), srandom(),    │ Bezpieczeństwo wątkowe │ MT-Safe │
       │ initstate(), setstate() │                        │         │
       └─────────────────────────┴────────────────────────┴─────────┘

ZGODNE Z

       POSIX.1-2001, POSIX.1-2008, 4.3BSD.

UWAGI

       Obecnie "optymalnymi" wartościami dla rozmiaru tablicy stanów n są 8, 32, 64,  128  i  256  bajtów;  inne
       wartości będą zaokrąglane w dół do najbliższej znanej wartości. Użycie mniej niż 8 bajtów spowoduje błąd.

       Funkcja  nie powinna być używana w przypadkach, gdy wiele wątków używa random(), a jej zachowanie powinno
       być powtarzalne. Do tego celu należy użyć random_r(3).

       Generowanie liczb pseudolosowych jest złożonym 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 wybitną dyskusję o
       praktycznych problemach generowania liczb pseudolosowych.

       Bardziej teoretyczną dyskusję, także zawierającą szczegółowy  opis  wielu  praktycznych  problemów  można
       znaleźć  w  rozdziale 3. ("Random Numbers") drugiego tomu ("Seminumerical Algorithms") książki Donalda E.
       Knutha "The  Art  of  Computer  Programming";  wydanie  drugie;  Reading,  Massachusetts:  Addison-Wesley
       Publishing Company, 1981.

BŁĘDY IMPLEMENTACJI

       Zgodnie z POSIX funkcja initstate() powinna zwrócić NULL w przypadku błędu. W implementacji glibc w razie
       błędu ustawiane jest errno (jak określono w POSIX), ale funkcja nie zwraca NULL.

ZOBACZ TAKŻE

       drand48(3), getrandom(2), rand(3), random_r(3), srand(3)

O STRONIE

       Angielska  wersja  tej strony pochodzi z wydania 4.07 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  man  są:  Andrzej Krzysztofowicz (PTM)
       <ankry@mif.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>.

       Polskie tłumaczenie jest częścią  projektu  manpages-pl;  uwagi,  pomoc,  zgłaszanie  błędów  na  stronie
       http://sourceforge.net/projects/manpages-pl/. Jest zgodne z wersją  4.07 oryginału.

GNU                                                2016-03-15                                          RANDOM(3)