Line | |
---|
1 | FUNCTION RNDM (ISEED) |
---|
2 | C |
---|
3 | C CERN PROGLIB# V104 RNDM .VERSION KERNVAX 2.39 930112 |
---|
4 | C ORIG. 22-MAR-88 from IBM version of G.Marsaglia et al., Montreal |
---|
5 | C |
---|
6 | C !!! Version valid only for VAX floating point format !!! |
---|
7 | C Careful: compile with /CHECK=NOOVERFLOW |
---|
8 | C |
---|
9 | C- Uniform Random Number Generator, |
---|
10 | C- giving the same sequence as the IBM and VAX m-language version |
---|
11 | |
---|
12 | EQUIVALENCE (AMAN,MANT) |
---|
13 | PARAMETER (MSK1 = 3072) |
---|
14 | C PARAMETER (MSK1 = '00000C00'X) |
---|
15 | PARAMETER (MSK2 = 13312) |
---|
16 | C PARAMETER (MSK2 = '00003400'X) |
---|
17 | SAVE MCGN |
---|
18 | DATA MCGN /12345/ |
---|
19 | |
---|
20 | |
---|
21 | MCGN = MCGN * 69069 |
---|
22 | MANT = ISHFT (MCGN,-8) |
---|
23 | IF (MANT.EQ.0) GO TO 14 |
---|
24 | AMAN = MANT |
---|
25 | C- AMAN in the range 1 to 2**24-1 |
---|
26 | MANT = MANT - MSK1 |
---|
27 | C- multiply by 2.**(-24) |
---|
28 | RNDM = AMAN |
---|
29 | RETURN |
---|
30 | |
---|
31 | C-- for zero set RNDM = 2.**(-25) |
---|
32 | 14 MANT = MSK2 |
---|
33 | RNDM = AMAN |
---|
34 | RETURN |
---|
35 | |
---|
36 | C-- Integer random number |
---|
37 | ENTRY IRNDM (ISEED) |
---|
38 | MCGN = MCGN * 69069 |
---|
39 | IRNDM = ISHFT (MCGN,-1) |
---|
40 | RETURN |
---|
41 | |
---|
42 | C-- Set the seed |
---|
43 | ENTRY RDMIN (ISEED) |
---|
44 | MCGN = ISEED |
---|
45 | RETURN |
---|
46 | |
---|
47 | C-- Get the seed |
---|
48 | ENTRY RDMOUT (ISEED) |
---|
49 | ISEED = MCGN |
---|
50 | END |
---|
Note: See
TracBrowser
for help on using the repository browser.