]>
Commit | Line | Data |
---|---|---|
fe4da5cc | 1 | * |
2 | * $Id$ | |
3 | * | |
4 | * $Log$ | |
5 | * Revision 1.1.1.1 1996/02/15 17:50:24 mclareni | |
6 | * Kernlib | |
7 | * | |
8 | * | |
9 | FUNCTION RNDM (ISEED) | |
10 | C | |
11 | C CERN PROGLIB# V104 RNDM .VERSION KERNDOS 1.00 920624 | |
12 | C ORIG. 22-MAR-88 from IBM version of G.Marsaglia et al., Montreal | |
13 | C MODIF 24/06/92, adapted N.Karpenko, Dubna | |
14 | C | |
15 | C !!! Version valid only for 32 bit machines !!! | |
16 | C !!! with IEEE floating point representation !!! | |
17 | C | |
18 | C- Uniform Random Number Generator, | |
19 | C- giving the same sequence as the IBM and VAX version | |
20 | ||
21 | EQUIVALENCE (AMAN,MANT) | |
22 | PARAMETER (MSK1 = 201326592) | |
23 | PARAMETER (MSK2 = 855638016) | |
24 | C PARAMETER (MSK1 = '0C000000'X) | |
25 | C PARAMETER (MSK2 = '33000000'X) | |
26 | COMMON /MCGN/ MCGN | |
27 | DATA MCGN /12345/ | |
28 | ||
29 | ||
30 | MCGN = MCGN * 69069 | |
31 | MANT = ISHFT (MCGN,-8) | |
32 | IF (MANT.EQ.0) GO TO 14 | |
33 | AMAN = MANT | |
34 | C- AMAN in the range 1 to 2**24-1 | |
35 | MANT = MANT - MSK1 | |
36 | C- multiply by 2.**(-24) | |
37 | RNDM = AMAN | |
38 | RETURN | |
39 | ||
40 | C-- for zero set RNDM = 2.**(-25) | |
41 | 14 MANT = MSK2 | |
42 | RNDM = AMAN | |
43 | RETURN | |
44 | END | |
45 | FUNCTION IRNDM(ISEEK) | |
46 | COMMON /MCGN/ MCGN | |
47 | ||
48 | C-- Integer random number | |
49 | MCGN = MCGN * 69069 | |
50 | IRNDM = ISHFT (MCGN,-1) | |
51 | RETURN | |
52 | END | |
53 | SUBROUTINE RDMIN(ISEED) | |
54 | COMMON /MCGN/ MCGN | |
55 | ||
56 | C-- Set the seed | |
57 | MCGN = ISEED | |
58 | RETURN | |
59 | ||
60 | C-- Get the seed | |
61 | ENTRY RDMOUT (ISEED) | |
62 | ISEED = MCGN | |
63 | END |