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.