5 * Revision 1.1.1.1 1996/04/01 15:02:53 mclareni
10 #if defined(CERNLIB_UNIX)||defined(CERNLIB_QMALPH)
11 FUNCTION NORRAN ( RN )
13 C FORTRAN version for Alliant of CERN library routine NORRAN
14 C (entry V101) for the generation of standard normal pseudo-
15 C random numbers. / Ch.Walck 880407
18 C R = UNI ( DUMMY ) Continuous uniform r.n. 0 TO 1
19 C R = VNI ( DUMMY ) Continuous uniform r.n. -1 to 1
20 C CALL NORRAN ( R ) Standard normal r.n.
21 C CALL NORRIN ( ISEED1, ISEED2 ) Initialize seeds
22 C CALL NORRUT ( ISEED1, ISEED2 ) Access seeds
25 PARAMETER ( M20=2**20-1, M24=2**24-1, XM24=2.0**(-24)
28 INTEGER R0, R1, R2, SEED1, SEED2, SIGN, SRGN
29 EQUIVALENCE (MAN,XMAN)
30 DATA TBL/ 0.0000, 0.0625, 2*0.1250, 4*0.1875, 5*0.2500
31 + , 0.5625, 5*0.6250, 3*0.8750, 1.1250, 1.4375
32 + , 5*0.0000, 5*0.0625, 4*0.1250, 2*0.1875, 0.2500
33 + , 5*0.3125, 5*0.3750, 5*0.4375, 5*0.5000, 4*0.5625
34 + , 4*0.6875, 4*0.7500, 4*0.8125, 0.8750, 3*0.9375
35 + , 3*1.0000, 3*1.0625, 2*1.1250, 2*1.1875, 2*1.2500
36 + , 2*1.3125, 2*1.3750, 1.4375, 1.5000, 1.5625
37 + , 1.6250, 1.6875, 1.7500, 1.8125,10*0.3125
38 + , 7*0.3750, 5*0.4375, 2*0.5000, 9*0.6875, 5*0.7500
39 + , 0.8125,10*0.9375, 7*1.0000, 3*1.0625,12*1.1875
40 + , 9*1.2500, 5*1.3125, 2*1.3750,13*1.5000,10*1.5625
41 + , 7*1.6250, 5*1.6875, 2*1.7500,15*1.8750,13*1.9375
42 + ,12*2.0000,10*2.0625, 9*2.1250, 8*2.1875, 7*2.2500
43 + , 6*2.3125, 5*2.3750, 4*2.4375, 3*2.5000, 3*2.5625
44 + , 2*2.6250, 2*2.6875 /
45 DATA MCGN/12345/, SRGN/1073/
47 R0 = IEOR ( ISHFT(SRGN,-15), SRGN )
53 IF ( R0 .GE. 104 ) GO TO 2
56 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
57 RN = XM28 * XMAN + TBL(R0)
60 2 IF ( R0 .GE. 208 ) GO TO 3
64 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
65 RN = - ( XM28 * XMAN + TBL(R0) )
69 IF ( R0 .GE. 3631 ) GO TO 4
71 MAN = ISHFT ( IAND(R2,M20), 4 )
73 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
74 RN = XM28 * XMAN + TBL(R0)
77 4 IF ( R0 .GE. 3934 ) GO TO 5
79 MAN = ISHFT ( IAND(R2,M20), 4 )
81 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
82 RN = - ( XM28 * XMAN + TBL(R0) )
88 C UNI entry for RNORTH
91 R0 = IEOR ( ISHFT(SRGN,-15), SRGN )
92 R1 = ISHFT ( R0 , 17 )
93 SRGN = IEOR ( R0 ,R1 )
95 MAN = ISHFT ( IEOR ( SRGN, MCGN ) , -8 )
97 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
101 C Uniform number between -1 and 1 for RNORTH
104 R0 = IEOR ( ISHFT(SRGN,-15), SRGN )
105 R1 = ISHFT ( R0 , 17 )
106 SRGN = IEOR ( R0 ,R1 )
108 R2 = IEOR ( SRGN, MCGN )
109 MAN = IAND ( ISHFT ( R2, -7 ), M24 )
110 SIGN = ISHFT ( R2, -31 )
113 IF ( XMAN .EQ. 0.0 ) XMAN = 0.5
114 VNI = SIGN * XM24 * XMAN
119 ENTRY NORRIN ( SEED1, SEED2 )
127 ENTRY NORRUT ( SEED1, SEED2 )