focal (3) srandom.3.gz

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.