.TH RAND 3
.SH NAME
rand, lrand, frand, nrand, lnrand, srand, truerand, ntruerand, fastrand, nfastrand \- random number generator
.SH SYNOPSIS
.B #include <u.h>
.br
.B #include <libc.h>
.PP
.ta \w'\fLdouble 'u
.B
int	rand(void)
.PP
.B
long	lrand(void)
.PP
.B
double	frand(void)
.PP
.B
int	nrand(int val)
.PP
.B
long	lnrand(long val)
.PP
.B
void	srand(long seed)
.PP
.B
ulong	truerand(void)
.PP
.B
ulong	ntruerand(ulong val)
.sp
.B #include <mp.h>
.br
.B #include <libsec.h>
.PP
.B
void	genrandom(uchar *buf, int nbytes)
.PP
.B
void	prng(uchar *buf, int nbytes)
.PP
.B
ulong	fastrand(void)
.PP
.B
ulong	nfastrand(ulong val)
.SH DESCRIPTION
.I Rand
returns a uniform pseudo-random
number
.IR x ,
.RI 0≤ x <2\u\s715\s10\d.
.PP
.I Lrand
returns a uniform
.B long
.IR x ,
.RI 0≤ x <2\u\s731\s10\d.
.PP
.I Frand
returns a uniform
.B double
.IR x ,
.RI 0.0≤ x <1.0,
This function calls
.I lrand
twice to generate a number with as many as 62 significant bits of mantissa.
.PP
.I Nrand
returns a uniform integer
.IR x ,
.RI 0≤ x < val.
.I Lnrand
is the same, but returns a
.BR long .
.PP
The algorithm is additive feedback with:
.IP
x[n] = (x[n\(mi273] + x[n\(mi607]) mod
.if t 2\u\s731\s0\d
.if n 2^31
.LP
giving a period of
.if t 2\u\s730\s10\d \(mu (2\u\s7607\s10\d \- 1).
.if n 2^30 × (2^607 - 1).
.PP
The generators are initialized by calling
.I srand
with whatever you like as argument.
To get a different starting value each time,
.IP
.L
srand(time(0))
.LP
will work as long as it is not called more often
than once per second.
Calling
.IP
.L
srand(1)
.LP
will initialize the generators to their
starting state.
.PP
.I Truerand
returns a random unsigned long read from
.BR /dev/random .
Due to the nature of
.BR /dev/random ,
truerand can only return a few hundred bits a
second.
.PP
.I Ntruerand
returns a uniform random integer
.IR x ,
.RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
.PP
.I Genrandom
fills a buffer with bytes from the X9.17 pseudo-random
number generator.  The X9.17 generator is seeded by 24
truly random bytes read from
.BR /dev/random .
.PP
.I Prng
uses the native
.IR rand (3)
pseudo-random number generator to fill the buffer.  Used with
.IR srand ,
this function can produce a reproducible stream of pseudo random
numbers useful in testing.
.PP
Both
.I genrandom
and
.I prng
may be passed to
.I mprand
(see
.IR mp (3)).
.PP
.I Fastrand
uses
.I genrandom
to return a uniform
.B "unsigned long
.IR x ,
.RI 0≤ x < 2\u\s732\s10\d-1.
.PP
.I Nfastrand
uses
.I genrandom
to return a uniform
.B "unsigned long
.IR x ,
.RI 0≤ x < val ≤ 2\u\s732\s10\d-1.
.SH SOURCE
.B \*9/src/lib9
.br
.B \*9/src/libsec/port
.SH "SEE ALSO
.\" .IR cons (3),
.IR mp (3)
.SH BUGS
.I Truerand
and
.I ntruerand
maintain a static file descriptor.
.PP
To avoid name conflicts with the underlying system,
.IR rand ,
.IR lrand ,
.IR frand ,
.IR nrand ,
.IR lnrand ,
and
.I srand
are preprocessor macros defined as
.IR p9rand ,
.IR p9lrand ,
and so on;
see
.IR intro (3).
.ie \n(HT .ds HT "
.el .ds HT " (see HTML-formatted man page for link)
.PP
Some versions of SunOS do not ship with
.B /dev/random
installed.
You may have to download a
.HR "http://sunsolve.sun.com/search/document.do?assetkey=1-25-27606-1" "patch from Sun\*(HT"
to add it to your system.
