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