|
|
1.1 root 1: .TH DRAND48 3L "630 MTG"
2: .SH NAME
3: drand48, erand48, lrand48, nrand48, mrand48, jrand48, srand48, seed48, lcong48 \- generate uniformly distributed pseudo-random numbers
4: .SH SYNOPSIS
5: .EQ
6: delim $$
7: .EN
8: .B double drand48 ( )
9: .sp
10: \f3double erand48 ( xsubi )\f1
11: .br
12: \f3unsigned short xsubi [3];\f1
13: .sp
14: .B long lrand48 ( )
15: .sp
16: \f3long nrand48 ( xsubi )\f1
17: .br
18: \f3unsigned short xsubi [3];\f1
19: .sp
20: .B long mrand48 ( )
21: .sp
22: \f3long jrand48 ( xsubi )\f1
23: .br
24: \f3unsigned short xsubi [3];\f1
25: .sp
26: .B void srand48 (seedval)
27: .br
28: .B long seedval;
29: .sp
30: .B unsigned short \(**seed48 (seed16v)
31: .br
32: .B unsigned short seed16v[3];
33: .sp
34: .B void lcong48 (param)
35: .br
36: .B unsigned short param[7];
37: .SH DESCRIPTION
38: .EQ
39: delim $$
40: .EN
41: This family of functions generates pseudo-random numbers using the
42: well-known linear congruential algorithm and 48-bit integer arithmetic.
43: .PP
44: Functions
45: .I drand48\^
46: and
47: .I erand48\^
48: return non-negative double-precision floating-point values
49: uniformly distributed over the interval $[0.0,~1.0).$
50: .PP
51: Functions
52: .I lrand48\^
53: and
54: .I nrand48\^
55: return non-negative long integers uniformly distributed over the
56: interval $[0,~2 sup 31 ).$
57: .PP
58: Functions
59: .I mrand48\^
60: and
61: .I jrand48\^
62: return signed long integers uniformly distributed over the interval
63: $[-2 sup 31 ,~2 sup 31 ).$
64: .PP
65: Functions
66: .I srand48, seed48\^
67: and
68: .I lcong48\^
69: are initialization entry points, one of which should be invoked before
70: either
71: .I drand48, lrand48\^
72: or
73: .I mrand48\^
74: is called.
75: (Although it is not recommended practice,
76: constant default initializer values will be supplied automatically if
77: .I drand48, lrand48\^
78: or
79: .I mrand48\^
80: is called without a prior call to an initialization entry point.)
81: Functions
82: .I erand48, nrand48\^
83: and
84: .I jrand48\^
85: do not require an initialization entry point to be called first.
86: .PP
87: All the routines work by generating a sequence of 48-bit integer values,
88: $X sub i ,$ according to the linear congruential formula
89: .PP
90: .ce
91: .EQ I
92: X sub{n+1}~=~(aX sub n^+^c) sub{roman mod~m}~~~~~~~~n>=0.
93: .EN
94: .PP
95: The parameter $m^=^2 sup 48$; hence 48-bit integer arithmetic is
96: performed.
97: Unless
98: .I lcong48\^
99: has been invoked, the multiplier value $a$ and the addend value $c$
100: are given by
101: .PP
102: .RS 6
103: .EQ I
104: a~mark =~roman 5DEECE66D^sub 16~=~roman 273673163155^sub 8
105: .EN
106: .br
107: .EQ I
108: c~lineup =~roman B^sub 16~=~roman 13^sub 8 .
109: .EN
110: .RE
111: .PP
112: The value returned by any of the functions
113: .I drand48, erand48, lrand48, nrand48, mrand48\^
114: or
115: .I jrand48\^
116: is computed by first generating the next 48-bit $X sub i$ in the sequence.
117: Then the appropriate number of bits, according to the type of data item
118: to be returned, are copied from the high-order (leftmost) bits of $X sub i$
119: and transformed into the returned value.
120: .PP
121: The functions
122: .I drand48, lrand48\^
123: and
124: .I mrand48\^
125: store the last 48-bit $X sub i$ generated in an internal buffer,
126: and must be initialized prior to being invoked.
127: The functions
128: .I erand48, nrand48\^
129: and
130: .I jrand48\^
131: require the calling program to provide storage for the
132: successive $X sub i$ values in the array
133: specified as an argument when the functions are invoked.
134: These routines do not have to be initialized; the calling
135: program must place the desired initial value of $X sub i$ into the
136: array and pass it as an argument.
137: By using different
138: arguments, functions
139: .I erand48, nrand48\^
140: and
141: .I jrand48\^
142: allow separate modules of a large program to generate several
143: .I independent\^
144: streams of pseudo-random numbers, i.e., the sequence of numbers
145: in each stream will
146: .I not\^
147: depend upon how many times the routines have been called to generate
148: numbers for the other streams.
149: .PP
150: The initializer function
151: .I srand48\^
152: sets the high-order 32 bits of $X sub i$ to the 32 bits contained in
153: its argument.
154: The low-order 16 bits of $X sub i$ are set to the arbitrary value
155: $roman 330E sub 16 .$
156: .PP
157: The initializer function
158: .I seed48\^
159: sets the value of $X sub i$ to the 48-bit value specified in the
160: argument array.
161: In addition, the previous value of $X sub i$ is copied into a 48-bit
162: internal buffer, used only by
163: .I seed48,\^
164: and a pointer to this buffer is the value returned by
165: .I seed48.\^
166: This returned pointer, which can just be ignored if not needed, is useful
167: if a program is to be restarted from a given point at some future time
168: \(em use the pointer to get at and store the last $X sub i$ value, and
169: then use this value to reinitialize via
170: .I seed48\^
171: when the program is restarted.
172: .PP
173: The initialization function
174: .I lcong48\^
175: allows the user to specify the initial $X sub i ,$ the multiplier value
176: $a,$ and the addend value $c.$
177: Argument array elements
178: .I param[0-2]\^
179: specify $X sub i ,$
180: .I param[3-5]\^
181: specify the multiplier $a,$ and
182: .I param[6]\^
183: specifies the 16-bit addend $c.$
184: After
185: .I lcong48\^
186: has been called, a subsequent call to either
187: .I srand48\^
188: or
189: .I seed48\^
190: will restore the ``standard'' multiplier and addend values, $a$ and $c,$
191: specified on the previous page.
192: .SH "SEE ALSO"
193: rand(3L).
194: .Ee
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.