Added rand48 manual page.
This commit is contained in:
parent
aed559e85d
commit
f2c1ee25de
@ -1,5 +1,5 @@
|
||||
# from: @(#)Makefile.inc 5.6 (Berkeley) 6/4/91
|
||||
# $Id: Makefile.inc,v 1.9 1993/10/09 00:03:32 jtc Exp $
|
||||
# $Id: Makefile.inc,v 1.10 1993/10/09 00:08:02 jtc Exp $
|
||||
|
||||
# stdlib sources
|
||||
.PATH: ${.CURDIR}/arch/${MACHINE}/stdlib ${.CURDIR}/stdlib
|
||||
@ -34,3 +34,6 @@ MLINKS+=getenv.3 setenv.3 getenv.3 unsetenv.3 getenv.3 putenv.3
|
||||
MLINKS+=qsort.3 heapsort.3
|
||||
MLINKS+=rand.3 srand.3
|
||||
MLINKS+=random.3 initstate.3 random.3 setstate.3 random.3 srandom.3
|
||||
MLINKS+=rand48.3 drand48.3 rand48.3 erand48.3 rand48.3 lrand48.3
|
||||
MLINKS+=rand48.3 mrand48.3 rand48.3 nrand48.3 rand48.3 jrand48.3
|
||||
MLINKS+=rand48.3 srand48.3 rand48.3 seed48.3 rand48.3 lcong48.3
|
||||
|
160
lib/libc/stdlib/rand48.3
Normal file
160
lib/libc/stdlib/rand48.3
Normal file
@ -0,0 +1,160 @@
|
||||
\" Copyright (c) 1993 Martin Birgmeier
|
||||
.\" All rights reserved.
|
||||
.\"
|
||||
.\" You may redistribute unmodified or modified versions of this source
|
||||
.\" code provided that the above copyright notice and this and the
|
||||
.\" following conditions are retained.
|
||||
.\"
|
||||
.\" This software is provided ``as is'', and comes with no warranties
|
||||
.\" of any kind. I shall in no event be liable for anything that happens
|
||||
.\" to anyone/anything when using this software.
|
||||
.\"
|
||||
.\" $Id: rand48.3,v 1.1 1993/10/09 00:08:05 jtc Exp $
|
||||
.\"
|
||||
.Dd October 8, 1993
|
||||
.Dt RAND48 3
|
||||
.Os
|
||||
.Sh NAME
|
||||
.Nm drand48 ,
|
||||
.Nm erand48 ,
|
||||
.Nm lrand48 ,
|
||||
.Nm nrand48 ,
|
||||
.Nm mrand48 ,
|
||||
.Nm jrand48 ,
|
||||
.Nm srand48 ,
|
||||
.Nm seed48 ,
|
||||
.Nm lcong48
|
||||
.Nd pseudo random number generators and initialization routines
|
||||
.Sh SYNOPSIS
|
||||
.Fd #include <stdlib.h>
|
||||
.Ft double
|
||||
.Fn drand48 void
|
||||
.Ft double
|
||||
.Fn erand48 "unsigned short xseed[3]"
|
||||
.Ft long
|
||||
.Fn lrand48 void
|
||||
.Ft long
|
||||
.Fn nrand48 "unsigned short xseed[3]"
|
||||
.Ft long
|
||||
.Fn mrand48 void
|
||||
.Ft long
|
||||
.Fn jrand48 "unsigned short xseed[3]"
|
||||
.Ft void
|
||||
.Fn srand48 "long seed"
|
||||
.Ft "unsigned short *"
|
||||
.Fn seed48 "unsigned short xseed[3]"
|
||||
.Ft void
|
||||
.Fn lcong48 "unsigned short p[7]"
|
||||
.Sh DESCRIPTION
|
||||
The
|
||||
.Fn rand48
|
||||
family of functions generates pseudo-random numbers using a linear
|
||||
congruential algorithm working on integers 48 bits in size. The
|
||||
particular formula employed is
|
||||
r(n+1) = (a * r(n) + c) mod m
|
||||
where the default values are
|
||||
for the multiplicand a = 0xfdeece66d = 25214903917 and
|
||||
the addend c = 0xb = 11. The modulus is always fixed at m = 2 ** 48.
|
||||
r(n) is called the seed of the random number generator.
|
||||
.Pp
|
||||
For all the six generator routines described next, the first
|
||||
computational step is to perform a single iteration of the algorithm.
|
||||
.Pp
|
||||
.Fn drand48
|
||||
and
|
||||
.Fn erand48
|
||||
return values of type double. The full 48 bits of r(n+1) are
|
||||
loaded into the mantissa of the returned value, with the exponent set
|
||||
such that the values produced lie in the interval [0.0, 1.0).
|
||||
.Pp
|
||||
.Fn lrand48
|
||||
and
|
||||
.Fn nrand48
|
||||
return values of type long in the range
|
||||
[-2**31, 2**31-1]. The high-order (32) bits of
|
||||
r(n+1) are loaded into the returned value.
|
||||
.Pp
|
||||
.Fn mrand48
|
||||
and
|
||||
.Fn jrand48
|
||||
return values of type long in the range
|
||||
[0, 2**31-1]. The high-order (31) bits of
|
||||
r(n+1) are loaded into the lower bits of the returned value, with
|
||||
the topmost (sign) bit set to zero.
|
||||
.Pp
|
||||
.Fn drand48 ,
|
||||
.Fn lrand48 ,
|
||||
and
|
||||
.Fn mrand48
|
||||
use an internal buffer to store r(n). For these functions
|
||||
the initial value of r(0) = 0x1234abcd330e = 20017429951246.
|
||||
.Pp
|
||||
On the other hand,
|
||||
.Fn erand48 ,
|
||||
.Fn nrand48 ,
|
||||
and
|
||||
.Fn jrand48
|
||||
use a user-supplied buffer to store the seed r(n),
|
||||
which consists of an array of 3 shorts, where the zeroth member
|
||||
holds the least significant bits.
|
||||
.Pp
|
||||
All functions share the same multiplicand and addend.
|
||||
.Pp
|
||||
.Fn srand48
|
||||
is used to initialize the internal buffer r(n) of
|
||||
.Fn drand48 ,
|
||||
.Fn lrand48 ,
|
||||
and
|
||||
.Fn mrand48
|
||||
such that the 32 bits of the seed value are copied into the upper 32 bits
|
||||
of r(n), with the lower 16 bits of r(n) arbitrarily being set to 0x330e.
|
||||
Additionally, the constant multiplicand and addend of the algorithm are
|
||||
reset to the default values given above.
|
||||
.Pp
|
||||
.Fn seed48
|
||||
also initializes the internal buffer r(n) of
|
||||
.Fn drand48 ,
|
||||
.Fn lrand48 ,
|
||||
and
|
||||
.Fn mrand48 ,
|
||||
but here all 48 bits of the seed can be specified in an array of 3 shorts,
|
||||
where the zeroth member specifies the lowest bits. Again,
|
||||
the constant multiplicand and addend of the algorithm are
|
||||
reset to the default values given above.
|
||||
.Fn seed48
|
||||
returns a pointer to an array of 3 shorts which contains the old seed.
|
||||
This array is statically allocated, thus its contents are lost after
|
||||
each new call to
|
||||
.Fn seed48 .
|
||||
.Pp
|
||||
Finally,
|
||||
.Fn lcong48
|
||||
allows full control over the multiplicand and addend used in
|
||||
.Fn drand48 ,
|
||||
.Fn erand48 ,
|
||||
.Fn lrand48 ,
|
||||
.Fn nrand48 ,
|
||||
.Fn mrand48 ,
|
||||
and
|
||||
.Fn jrand48 ,
|
||||
and the seed used in
|
||||
.Fn drand48 ,
|
||||
.Fn lrand48 ,
|
||||
and
|
||||
.Fn mrand48 .
|
||||
An array of 7 shorts is passed as parameter; the first three shorts are
|
||||
used to initialize the seed; the second three are used to initialize the
|
||||
multiplicand; and the last short is used to initialize the addend.
|
||||
It is thus not possible to use values greater than 0xffff as the addend.
|
||||
.Pp
|
||||
Note that all three methods of seeding the random number generator
|
||||
always also set the multiplicand and addend for any of the six
|
||||
generator calls.
|
||||
.Pp
|
||||
For a more powerful random number generator, see
|
||||
.Xr random 3
|
||||
.Sh AUTHOR
|
||||
Martin Birgmeier
|
||||
.Sh SEE ALSO
|
||||
.Xr rand 3 ,
|
||||
.Xr random 3 .
|
Loading…
Reference in New Issue
Block a user