.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991)
.\"     386BSD man pages
.\" Modified Sun Mar 28 00:25:51 1993, David Metcalfe
.\" Modified Sat Jul 24 18:13:39 1993 by Rik Faith (faith@cs.unc.edu)
.\" Modified Sun Aug 20 21:47:07 2000, aeb
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.\" This file is distributed under the same license as original manpage
.\" Copyright of the original manpage:
.\" Copyright © 1993 David Metcalfe 
.\" Copyright © of Polish translation:
.\" Andrzej Krzysztofowicz (PTM) <ankry@mif.pg.gda.pl>, 2000.
.\" Robert Luberda <robert@debian.org>, 2013.
.\" Michał Kułach <michal.kulach@gmail.com>, 2014.
.TH RANDOM 3 2014\-03\-25 GNU "Podręcznik programisty Linuksa"
.SH NAZWA
random, srandom, initstate, setstate \- generator liczb losowych
.SH SKŁADNIA
.nf
\fB#include <stdlib.h>\fP
.sp
\fBlong int random(void);\fP

\fBvoid srandom(unsigned int \fP\fIseed\fP\fB);\fP

\fBchar *initstate(unsigned int \fP\fIseed\fP\fB, char *\fP\fIstate\fP\fB, size_t \fP\fIn\fP\fB);\fP
.br
\fBchar *setstate(char *\fP\fIstate\fP\fB);\fP
.fi
.sp
.in -4n
Wymagane ustawienia makr biblioteki glibc (patrz \fBfeature_test_macros\fP(7)):
.in
.sp
.ad l
\fBrandom\fP(), \fBsrandom\fP(), \fBinitstate\fP(), \fBsetstate\fP():
.RS 4
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
.RE
.ad
.SH OPIS
Funkcja \fBrandom\fP() 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 \fBRAND_MAX\fP. Okres tego generatora
liczb losowych jest bardzo duży, wynosi około \fI16\ *\ ((2^31)\ \-\ 1)\fP.
.PP
Funkcja \fBsrandom\fP() ustawia swój argument jako wartość początkową dla
nowego ciągu pseudolosowych liczb całkowitych zwracanych przez
\fBrandom\fP(). Ciągi te są powtarzalne przez wywołanie \fBsrandom\fP() z tą samą
wartością początkową. Jeśli nie podano wartości początkowej, funkcja
\fBrandom\fP() automatycznie ustawia tę wartość na 1.
.PP
Funkcja \fBinitstate\fP() pozwala na inicjację tablicy stanów \fIstate\fP w celu
wykorzystania jej przez \fBrandom\fP(). \fBinitstate\fP() wykorzystuje rozmiar
tablicy stanów \fIn\fP do podjęcia decyzji o tym, jakiego wymyślnego generatora
liczb losowych powinna używać \(em im większa tablica stanów, tym lepszy
będzie generator liczb losowych. \fIseed\fP 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.
.PP
Funkcja \fBsetstate\fP() zmienia tablicę stanów wykorzystywaną przez funkcję
\fBrandom\fP(). Tablica stanu \fIstate\fP jest używana do generacji liczb losowych
aż do następnego wywołania \fBinitstate\fP() lub \fBsetstate\fP(). \fIstate\fP musi
być uprzednio zainicjowana za pomocą \fBinitstate\fP() lub być wynikiem
wcześniejszego wywołania \fBsetstate\fP().
.SH "WARTOŚĆ ZWRACANA"
Funkcja \fBrandom\fP() zwraca wartości pomiędzy 0 a \fBRAND_MAX\fP. Funkcja
\fBsrandom\fP() nie zwraca żadnej wartości.

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

Jeśli zakończy się pomyślnie, funkcja \fBsetstate\fP() zwraca wskaźnik do
poprzedniej tablicy stanów. W przypadku błędu zwraca NULL i ustawia
\fIerrno\fP, wskazując na przyczynę błędu.
.SH BŁĘDY
.TP 
\fBEINVAL\fP
Argument \fIstate\fP przekazany do \fBsetstate\fP() był równy NULL.
.TP 
\fBEINVAL\fP
Podano mniejszą niż 8\-bajtową tablicę stanów dla \fBinitstate\fP().
.SH ATRYBUTY
.SS "Wielowątkowość (patrz pthreads(7))"
Funkcje \fBrandom\fP(), \fBsrandom\fP(), \fBinitstate\fP() i \fBsetstate\fP() są wątkowo
bezpieczne.
.SH "ZGODNE Z"
4.3BSD, POSIX.1\-2001.
.SH UWAGI
Obecnie "optymalnymi" wartościami dla rozmiaru tablicy stanów \fIn\fP 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.
.PP
Funkcja nie powinna być używana w przypadkach, gdy wiele wątków używa
\fBrandom\fP(), a jej zachowanie powinno być powtarzalne. Do tego celu należy
użyć \fBrandom_r\fP(3).
.PP
Generowanie liczb pseudolosowych jest złożonym tematem. "\fINumerical Recipes
in C: The Art of Scientific Computing\fP" (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.
.PP
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 "\fIThe
Art of Computer Programming\fP"; wydanie drugie; Reading, Massachusetts:
Addison\-Wesley Publishing Company, 1981.
.SH "BŁĘDY IMPLEMENTACJI"
.\" http://sourceware.org/bugzilla/show_bug.cgi?id=15380
Zgodnie z POSIX funkcja \fBinitstate\fP() powinna zwrócić NULL w przypadku
błędu. W implementacji glibc w razie błędu ustawiane jest \fIerrno\fP (jak
określono w POSIX), ale funkcja nie zwraca NULL.
.SH "ZOBACZ TAKŻE"
\fBdrand48\fP(3), \fBrand\fP(3), \fBrandom_r\fP(3), \fBsrand\fP(3)
.SH "O STRONIE"
Angielska wersja tej strony pochodzi z wydania 3.71 projektu Linux
\fIman\-pages\fP. 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/.
.SH 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>.
.PP
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ą \fB 3.71 \fPoryginału.
