\section{\module{whrandom} ---
         Pseudo-random number generator}

\declaremodule{standard}{whrandom}
\modulesynopsis{Floating point pseudo-random number generator.}


This module implements a Wichmann-Hill pseudo-random number generator
class that is also named \class{whrandom}.  Instances of the
\class{whrandom} class conform to the Random Number Generator
interface described in section \ref{rng-objects}.  They also offer the 
following method, specific to the Wichmann-Hill algorithm:

\begin{methoddesc}[whrandom]{seed}{\optional{x, y, z}}
  Initializes the random number generator from the integers \var{x},
  \var{y} and \var{z}.  When the module is first imported, the random
  number is initialized using values derived from the current time.
  If \var{x}, \var{y}, and \var{z} are either omitted or \code{0}, the 
  seed will be computed from the current system time.  If one or two
  of the parameters are \code{0}, but not all three, the zero values
  are replaced by ones.  This causes some apparently different seeds
  to be equal, with the corresponding result on the pseudo-random
  series produced by the generator.
\end{methoddesc}

\begin{funcdesc}{choice}{seq}
Chooses a random element from the non-empty sequence \var{seq} and returns it.
\end{funcdesc}

\begin{funcdesc}{randint}{a, b}
Returns a random integer \var{N} such that \code{\var{a}<=\var{N}<=\var{b}}.
\end{funcdesc}

\begin{funcdesc}{random}{}
Returns the next random floating point number in the range [0.0 ... 1.0).
\end{funcdesc}

\begin{funcdesc}{seed}{x, y, z}
Initializes the random number generator from the integers \var{x},
\var{y} and \var{z}.  When the module is first imported, the random
number is initialized using values derived from the current time.
\end{funcdesc}

\begin{funcdesc}{uniform}{a, b}
Returns a random real number \var{N} such that \code{\var{a}<=\var{N}<\var{b}}.
\end{funcdesc}

When imported, the \module{whrandom} module also creates an instance of
the \class{whrandom} class, and makes the methods of that instance
available at the module level.  Therefore one can write either 
\code{N = whrandom.random()} or:

\begin{verbatim}
generator = whrandom.whrandom()
N = generator.random()
\end{verbatim}

Note that using separate instances of the generator leads to
independent sequences of pseudo-random numbers.

\begin{seealso}
  \seemodule{random}{Generators for various random distributions and
                     documentation for the Random Number Generator
                     interface.}
  \seetext{Wichmann, B. A. \& Hill, I. D., ``Algorithm AS 183: 
           An efficient and portable pseudo-random number generator'',
           \citetitle{Applied Statistics} 31 (1982) 188-190.}
\end{seealso}
