128 lines
4.8 KiB
HTML
128 lines
4.8 KiB
HTML
<HTML>
|
|
<HEAD>
|
|
<TITLE>random(3)</TITLE>
|
|
</HEAD>
|
|
<BODY>
|
|
<H1>random(3)</H1>
|
|
<HR>
|
|
<PRE>
|
|
|
|
</PRE>
|
|
<H2>NAME</H2><PRE>
|
|
random, srandom, initstate, setstate - better random number generator;
|
|
routines for changing generators
|
|
|
|
|
|
</PRE>
|
|
<H2>SYNOPSIS</H2><PRE>
|
|
<STRONG>#include</STRONG> <STRONG><stdlib.h></STRONG>
|
|
|
|
<STRONG>long</STRONG> <STRONG>random(void)</STRONG>
|
|
<STRONG>void</STRONG> <STRONG>srandom(unsigned</STRONG> <EM>seed</EM><STRONG>)</STRONG>
|
|
<STRONG>char</STRONG> <STRONG>*initstate(unsigned</STRONG> <EM>seed</EM><STRONG>,</STRONG> <STRONG>char</STRONG> <STRONG>*</STRONG><EM>state</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>n</EM><STRONG>)</STRONG>
|
|
<STRONG>char</STRONG> <STRONG>*setstate(char</STRONG> <STRONG>*</STRONG><EM>state</EM><STRONG>)</STRONG>
|
|
|
|
|
|
</PRE>
|
|
<H2>DESCRIPTION</H2><PRE>
|
|
|
|
<STRONG>Random</STRONG> 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 (2**31)-1. The period of
|
|
this random number generator is very large, approximately 16*((2**31)-1).
|
|
|
|
<STRONG>Random/srandom</STRONG> have (almost) the same calling sequence and initialization
|
|
properties as <STRONG>rand/srand.</STRONG> The difference is that <STRONG><A HREF="../man3/rand.3.html">rand(3)</A></STRONG> produces a much
|
|
less random sequence -- in fact, the low dozen bits generated by rand go
|
|
through a cyclic pattern. All the bits generated by <STRONG>random</STRONG> are usable.
|
|
For example, ``random()&01'' will produce a random binary value.
|
|
|
|
Unlike <STRONG>srand</STRONG>, <STRONG>srandom</STRONG> does not return the old seed; the reason for this
|
|
is that the amount of state information used is much more than a single
|
|
word. (Two other routines are provided to deal with restarting/changing
|
|
random number generators). Like <STRONG><A HREF="../man3/rand.3.html">rand(3)</A></STRONG>, however, <STRONG>random</STRONG> will by default
|
|
produce a sequence of numbers that can be duplicated by calling <STRONG>srandom</STRONG>
|
|
with <STRONG>1</STRONG> as the seed.
|
|
|
|
The <STRONG>initstate</STRONG> routine allows a state array, passed in as an argument, to
|
|
be initialized for future use. The size of the state array (in bytes) is
|
|
used by <STRONG>initstate</STRONG> to decide how sophisticated a random number generator
|
|
it should use -- the more state, the better the random numbers will be.
|
|
(Current "optimal" values for the amount of state information 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). The seed
|
|
for the initialization (which specifies a starting point for the random
|
|
number sequence, and provides for restarting at the same point) is also
|
|
an argument. <STRONG>Initstate</STRONG> returns a pointer to the previous state
|
|
information array.
|
|
|
|
Once a state has been initialized, the <STRONG>setstate</STRONG> routine provides for
|
|
rapid switching between states. <STRONG>Setstate</STRONG> returns a pointer to the
|
|
previous state array; its argument state array is used for further random
|
|
number generation until the next call to <STRONG>initstate</STRONG> or <STRONG>setstate</STRONG>.
|
|
|
|
|
|
Once a state array has been initialized, it may be restarted at a
|
|
different point either by calling <STRONG>initstate</STRONG> (with the desired seed, the
|
|
state array, and its size) or by calling both <STRONG>setstate</STRONG> (with the state
|
|
array) and <STRONG>srandom</STRONG> (with the desired seed). The advantage of calling
|
|
both <STRONG>setstate</STRONG> and <STRONG>srandom</STRONG> is that the size of the state array does not
|
|
have to be remembered after it is initialized.
|
|
|
|
With 256 bytes of state information, the period of the random number
|
|
generator is greater than 2**69 which should be sufficient for most
|
|
purposes.
|
|
|
|
|
|
</PRE>
|
|
<H2>AUTHOR</H2><PRE>
|
|
Earl T. Cohen
|
|
|
|
|
|
</PRE>
|
|
<H2>DIAGNOSTICS</H2><PRE>
|
|
|
|
If <STRONG>initstate</STRONG> is called with less than 8 bytes of state information, or if
|
|
<STRONG>setstate</STRONG> detects that the state information has been garbled, error
|
|
messages are printed on the standard error output.
|
|
|
|
|
|
</PRE>
|
|
<H2>SEE ALSO</H2><PRE>
|
|
<STRONG><A HREF="../man3/rand.3.html">rand(3)</A></STRONG>.
|
|
|
|
|
|
</PRE>
|
|
<H2>NOTES</H2><PRE>
|
|
<STRONG>initstate</STRONG> and <STRONG>setstate</STRONG> are not declared in <<EM>stdlib</EM>.<EM>h</EM>>, programmers must
|
|
provide their own declarations.
|
|
|
|
|
|
</PRE>
|
|
<H2>BUGS</H2><PRE>
|
|
About 2/3 the speed of <STRONG><A HREF="../man3/rand.3.html">rand(3)</A></STRONG>.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
</PRE>
|
|
</BODY>
|
|
</HTML>
|