table of contents
- buster 1:0.7-1
- buster-backports 1:4.2.0-1~bpo10+2
- testing 1:4.9.1-7
- unstable 1:4.9.1-7
RANDOM(3) | Podręcznik programisty Linuksa | RANDOM(3) |
NAZWA¶
random, srandom, initstate, setstate - generator liczb losowychSKŁ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():
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. Obecnie "optymalnymi" wartościami rozmiaru n tablicy stanów są: 8, 32, 64, 128 i 256 bajtów; inne wartości zostaną zaokrąglone w dół do najbliższej z wymienionych wartości. seed jest wartością początkową dla inicjacji, 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).Interfejs | Atrybut | Wartość |
random(), srandom(), initstate(), setstate() | Bezpieczeństwo wątkowe | MT-Safe |
ZGODNE Z¶
POSIX.1-2001, POSIX.1-2008, 4.3BSD.UWAGI¶
Funkcja random() nie powinna być używana w programach wielowątkowych, gdy wymagane jest, by jej zachowanie było 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¶
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¶
getrandom(2), drand48(3), rand(3), random_r(3), srand(3)O STRONIE¶
Angielska wersja tej strony pochodzi z wydania 5.04 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 są: Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>, Robert Luberda <robert@debian.org> i Michał Kułach <michal.kulach@gmail.com>Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach licencji można uzyskać zapoznając się z GNU General Public License w wersji 3 lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres <manpages-pl-list@lists.sourceforge.net>.
6 marca 2019 r. | GNU |