blob: a63b8b39afb8a053883c22a5070f2fc4bfb0955a (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
define LEN_IR 97
define IC 150889
define M 714025
define IA 1366
define RM 1.400511e-6
# DAORAN -- The random number generator RAN2 from Numerical Recipes.
real procedure daoran (idum)
int idum # seed for the random number generator
int j, iff, iy, ir[LEN_IR]
real rnum2
data iff /0/
begin
repeat {
# Initialize the random number generator.
if ((idum < 0) || (iff == 0)) {
iff = 1
idum = mod (abs (IC - idum), M)
do j = 1, LEN_IR {
idum = mod (IA * idum + IC, M)
ir[j] = idum
}
idum = mod (IA * idum + IC, M)
iy = idum
}
# Get the random number
j = 1 + (LEN_IR * iy) / M
j = max (1, min (LEN_IR, j))
iy = ir[j]
rnum2 = iy * RM
idum = mod (IA * idum + IC, M)
ir[j] = idum
} until (rnum2 > 0.0)
return (rnum2)
end
|