mirror of https://github.com/mkerrisk/man-pages
164 lines
4.9 KiB
Groff
164 lines
4.9 KiB
Groff
.\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk)
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" 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
|
|
.\"
|
|
.TH RANDOM 3 2008-03-07 "GNU" "Linux Programmer's Manual"
|
|
.SH NAME
|
|
random, srandom, initstate, setstate \- random number generator
|
|
.SH SYNOPSIS
|
|
.nf
|
|
.B #include <stdlib.h>
|
|
.sp
|
|
.B long int random(void);
|
|
|
|
.BI "void srandom(unsigned int " seed );
|
|
|
|
.BI "char *initstate(unsigned int " seed ", char *" state ", size_t " n );
|
|
.br
|
|
.BI "char *setstate(char *" state );
|
|
.fi
|
|
.sp
|
|
.in -4n
|
|
Feature Test Macro Requirements for glibc (see
|
|
.BR feature_test_macros (7)):
|
|
.in
|
|
.sp
|
|
.ad l
|
|
.BR random (),
|
|
.BR srandom (),
|
|
.BR initstate (),
|
|
.BR setstate ():
|
|
_SVID_SOURCE || _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500
|
|
.ad b
|
|
.SH DESCRIPTION
|
|
The
|
|
.BR random ()
|
|
function uses a non-linear additive feedback random
|
|
number generator employing a default table of size 31 long integers to
|
|
return successive pseudo-random numbers in
|
|
the range from 0 to \fBRAND_MAX\fR.
|
|
The period of this random number generator is very large, approximately
|
|
16*((2**31)\-1).
|
|
.PP
|
|
The
|
|
.BR srandom ()
|
|
function sets its argument as the seed for a new
|
|
sequence of pseudo-random integers to be returned by
|
|
.BR random ().
|
|
These sequences are repeatable by calling
|
|
.BR srandom ()
|
|
with the same
|
|
seed value.
|
|
If no seed value is provided, the
|
|
.BR random ()
|
|
function
|
|
is automatically seeded with a value of 1.
|
|
.PP
|
|
The
|
|
.BR initstate ()
|
|
function allows a state array \fIstate\fP to
|
|
be initialized for use by
|
|
.BR random ().
|
|
The size of the state array
|
|
\fIn\fP is used by
|
|
.BR initstate ()
|
|
to decide how sophisticated a
|
|
random number generator it should use \(em the larger the state array,
|
|
the better the random numbers will be.
|
|
\fIseed\fP is the seed for the
|
|
initialization, which specifies a starting point for the random number
|
|
sequence, and provides for restarting at the same point.
|
|
.PP
|
|
The
|
|
.BR setstate ()
|
|
function changes the state array used by the
|
|
.BR random ()
|
|
function.
|
|
The state array \fIstate\fP is used for
|
|
random number generation until the next call to
|
|
.BR initstate ()
|
|
or
|
|
.BR setstate ().
|
|
\fIstate\fP must first have been initialized
|
|
using
|
|
.BR initstate ()
|
|
or be the result of a previous call of
|
|
.BR setstate ().
|
|
.SH "RETURN VALUE"
|
|
The
|
|
.BR random ()
|
|
function returns a value between 0 and
|
|
.BR RAND_MAX .
|
|
The
|
|
.BR srandom ()
|
|
function returns no value.
|
|
The
|
|
.BR initstate ()
|
|
and
|
|
.BR setstate ()
|
|
functions return a pointer to the previous state
|
|
array, or NULL on error.
|
|
.SH ERRORS
|
|
.TP
|
|
.B EINVAL
|
|
A state array of less than 8 bytes was specified to
|
|
.BR initstate ().
|
|
.SH "CONFORMING TO"
|
|
4.3BSD, POSIX.1-2001.
|
|
.SH NOTES
|
|
Current "optimal" values for the size of the state array \fIn\fP are
|
|
8, 32, 64, 128, and 256 bytes; other amounts will be rounded down to
|
|
the nearest known amount.
|
|
Using less than 8 bytes will cause an
|
|
error.
|
|
.PP
|
|
This function should not be used in cases where multiple threads use
|
|
.BR random ()
|
|
and the behavior should be reproducible.
|
|
Use
|
|
.BR random_r (3)
|
|
for that purpose.
|
|
.PP
|
|
Random-number generation is a complex topic.
|
|
.I 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, 3rd ed.)
|
|
provides an excellent discussion of practical random-number generation
|
|
issues in Chapter 7 (Random Numbers).
|
|
.PP
|
|
For a more theoretical discussion which also covers many practical issues
|
|
in depth, see Chapter 3 (Random Numbers) in Donald E. Knuth's
|
|
.IR "The Art of Computer Programming" ,
|
|
volume 2 (Seminumerical Algorithms), 2nd ed.; Reading, Massachusetts:
|
|
Addison-Wesley Publishing Company, 1981.
|
|
.SH "SEE ALSO"
|
|
.BR drand48 (3),
|
|
.BR rand (3),
|
|
.BR srand (3)
|