Provided by: manpages-pl-dev_0.6-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():
           _SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE >= 500 ||
           _XOPEN_SOURCE && _XOPEN_SOURCE_EXTENDED

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

   Wielowątkowość (patrz pthreads(7))
       Funkcje random(), srandom(), initstate() i setstate() są wątkowo bezpieczne.

ZGODNE Z

       4.3BSD, POSIX.1-2001.

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), rand(3), random_r(3), srand(3)

O STRONIE

       Angielska  wersja  tej  strony  pochodzi  z  wydania  3.71  projektu Linux man-pages. Opis
       projektu, informacje dotyczące zgłaszania błędów, oraz najnowszą  wersję  oryginału  można
       znaleźć pod adresem http://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ą    3.71
       oryginału.