1 | FUNCTION NORRAN ( RN ) |
---|
2 | C |
---|
3 | C FORTRAN version for Alliant of CERN library routine NORRAN |
---|
4 | C (entry V101) for the genereration of standard normal pseudo- |
---|
5 | C random numbers. / Ch.Walck 880407 |
---|
6 | C |
---|
7 | C Calling sequences: |
---|
8 | C R = UNI ( DUMMY ) Continuous uniform r.n. 0 TO 1 |
---|
9 | C R = VNI ( DUMMY ) Continuous uniform r.n. -1 to 1 |
---|
10 | C CALL NORRAN ( R ) Standard normal r.n. |
---|
11 | C CALL NORRIN ( ISEED1, ISEED2 ) Initialize seeds |
---|
12 | C CALL NORRUT ( ISEED1, ISEED2 ) Access seeds |
---|
13 | C |
---|
14 | SAVE MCGN, SRGN, TBL |
---|
15 | PARAMETER ( M20=2**20-1, M24=2**24-1, XM24=2.0**(-24) |
---|
16 | + , XM28=2.0**(-28) ) |
---|
17 | DIMENSION TBL(0:326) |
---|
18 | INTEGER R0, R1, R2, SEED1, SEED2, SIGN, SRGN |
---|
19 | EQUIVALENCE (MAN,XMAN) |
---|
20 | DATA TBL/ 0.0000, 0.0625, 2*0.1250, 4*0.1875, 5*0.2500 |
---|
21 | + , 0.5625, 5*0.6250, 3*0.8750, 1.1250, 1.4375 |
---|
22 | + , 5*0.0000, 5*0.0625, 4*0.1250, 2*0.1875, 0.2500 |
---|
23 | + , 5*0.3125, 5*0.3750, 5*0.4375, 5*0.5000, 4*0.5625 |
---|
24 | + , 4*0.6875, 4*0.7500, 4*0.8125, 0.8750, 3*0.9375 |
---|
25 | + , 3*1.0000, 3*1.0625, 2*1.1250, 2*1.1875, 2*1.2500 |
---|
26 | + , 2*1.3125, 2*1.3750, 1.4375, 1.5000, 1.5625 |
---|
27 | + , 1.6250, 1.6875, 1.7500, 1.8125,10*0.3125 |
---|
28 | + , 7*0.3750, 5*0.4375, 2*0.5000, 9*0.6875, 5*0.7500 |
---|
29 | + , 0.8125,10*0.9375, 7*1.0000, 3*1.0625,12*1.1875 |
---|
30 | + , 9*1.2500, 5*1.3125, 2*1.3750,13*1.5000,10*1.5625 |
---|
31 | + , 7*1.6250, 5*1.6875, 2*1.7500,15*1.8750,13*1.9375 |
---|
32 | + ,12*2.0000,10*2.0625, 9*2.1250, 8*2.1875, 7*2.2500 |
---|
33 | + , 6*2.3125, 5*2.3750, 4*2.4375, 3*2.5000, 3*2.5625 |
---|
34 | + , 2*2.6250, 2*2.6875 / |
---|
35 | DATA MCGN/12345/, SRGN/1073/ |
---|
36 | C |
---|
37 | R0 = IEOR ( ISHFT(SRGN,-15), SRGN ) |
---|
38 | R1 = ISHFT(R0,17) |
---|
39 | SRGN = IEOR(R0,R1) |
---|
40 | MCGN = 69069 * MCGN |
---|
41 | R2 = IEOR(SRGN,MCGN) |
---|
42 | R0 = ISHFT(R2,-24) |
---|
43 | IF ( R0 .GE. 104 ) GO TO 2 |
---|
44 | MAN = IAND(R2,M24) |
---|
45 | XMAN = MAN |
---|
46 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
47 | RN = XM28 * XMAN + TBL(R0) |
---|
48 | RETURN |
---|
49 | C |
---|
50 | 2 IF ( R0 .GE. 208 ) GO TO 3 |
---|
51 | R0 = R0 - 104 |
---|
52 | MAN = IAND(R2,M24) |
---|
53 | XMAN = MAN |
---|
54 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
55 | RN = - ( XM28 * XMAN + TBL(R0) ) |
---|
56 | RETURN |
---|
57 | C |
---|
58 | 3 R0 = ISHFT(R2,-20) |
---|
59 | IF ( R0 .GE. 3631 ) GO TO 4 |
---|
60 | R0 = R0 - 3304 |
---|
61 | MAN = ISHFT ( IAND(R2,M20), 4 ) |
---|
62 | XMAN = MAN |
---|
63 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
64 | RN = XM28 * XMAN + TBL(R0) |
---|
65 | RETURN |
---|
66 | C |
---|
67 | 4 IF ( R0 .GE. 3934 ) GO TO 5 |
---|
68 | R0 = R0 - 3607 |
---|
69 | MAN = ISHFT ( IAND(R2,M20), 4 ) |
---|
70 | XMAN = MAN |
---|
71 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
72 | RN = - ( XM28 * XMAN + TBL(R0) ) |
---|
73 | RETURN |
---|
74 | C |
---|
75 | 5 RN = RNORTH ( R2 ) |
---|
76 | RETURN |
---|
77 | C |
---|
78 | C UNI entry for RNORTH |
---|
79 | C |
---|
80 | ENTRY UNI ( DUMMY ) |
---|
81 | R0 = IEOR ( ISHFT(SRGN,-15), SRGN ) |
---|
82 | R1 = ISHFT ( R0 , 17 ) |
---|
83 | SRGN = IEOR ( R0 ,R1 ) |
---|
84 | MCGN = 69069 * MCGN |
---|
85 | MAN = ISHFT ( IEOR ( SRGN, MCGN ) , -8 ) |
---|
86 | XMAN = MAN |
---|
87 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
88 | UNI = XM24 * XMAN |
---|
89 | RETURN |
---|
90 | C |
---|
91 | C Uniform number between -1 and 1 for RNORTH |
---|
92 | C |
---|
93 | ENTRY VNI ( DUMMY ) |
---|
94 | R0 = IEOR ( ISHFT(SRGN,-15), SRGN ) |
---|
95 | R1 = ISHFT ( R0 , 17 ) |
---|
96 | SRGN = IEOR ( R0 ,R1 ) |
---|
97 | MCGN = 69069 * MCGN |
---|
98 | R2 = IEOR ( SRGN, MCGN ) |
---|
99 | MAN = IAND ( ISHFT ( R2, -7 ), M24 ) |
---|
100 | SIGN = ISHFT ( R2, -31 ) |
---|
101 | SIGN = 1 - 2 * SIGN |
---|
102 | XMAN = MAN |
---|
103 | IF ( XMAN .EQ. 0.0 ) XMAN = 0.5 |
---|
104 | VNI = SIGN * XM24 * XMAN |
---|
105 | RETURN |
---|
106 | C |
---|
107 | C Set seeds |
---|
108 | C |
---|
109 | ENTRY NORRIN ( SEED1, SEED2 ) |
---|
110 | MCGN = SEED1 |
---|
111 | SRGN = SEED2 |
---|
112 | RETURN |
---|
113 | C |
---|
114 | C Get seeds |
---|
115 | C |
---|
116 | ENTRY NORRUT ( SEED1, SEED2 ) |
---|
117 | cbm 27/07/00 SEED1 = MCGN |
---|
118 | cbm 27/07/00 SEED2 = SRGN |
---|
119 | MCGN = SEED1 |
---|
120 | SRGN = SEED2 |
---|
121 | RETURN |
---|
122 | END |
---|