]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MINICERN/mathlib/gen/v/rg32.F
Bugfix in AliPoints2Memory
[u/mrichter/AliRoot.git] / MINICERN / mathlib / gen / v / rg32.F
1 *
2 * $Id$
3 *
4 * $Log$
5 * Revision 1.1.1.1  1996/04/01 15:02:55  mclareni
6 * Mathlib gen
7 *
8 *
9 #include "gen/pilot.h"
10 #if defined(CERNLIB_VAX)
11       OPTIONS/CHECK=NOOVERFLOW
12 #endif
13       FUNCTION RG32(IDUMMY)
14 #if defined(CERNLIB_CRAY)
15 CDIR$ INTEGER=64
16 #endif
17 C         MACHINE-INDEPENDENT RANDOM NUMBER GENERATOR
18 C         PRODUCES GAUSSIAN-DISTRIBUTED FLOATING-PT.
19 C               NUMBERS OF MEAN ZERO AND VARIANCE ONE.
20 C         IDENTICAL SEQUENCE ON ALL MACHINES OF .GE. 32 BITS.
21 C              UNIVERSAL VERSION,  F.JAMES, 1985
22 C              IY     IS THE SEED,
23 C              CONS   IS 2**-23
24 C              MASK31 IS 17777777777 OCTAL
25       PARAMETER (CONS=1.1920928955078E-07, MASK31=2147483647)
26 CSELF,IF=-IBM. CERN EDITLIB+SIEMENS COMPILER PROBLEM.
27       SAVE IY
28 CSELF.
29       DATA IY/875949887/
30 C
31       JSUM = 0
32       DO 50 LOOP= 1, 12
33       IY = IY * 69069
34 C         KEEP ONLY LOWER 31 BITS
35       IY = IAND (IY, MASK31)
36 C         SHIFT RIGHT 8 BITS TO AVOID OVFLO
37       JY = IY /256
38       JSUM = JSUM + JY
39    50 CONTINUE
40 C         CORRECT FOR TRUNCATION BIAS AND ROUND TO NEAREST
41 C         EVEN BYTE TO ASSURE EXACT FLOAT
42       JSUM = (JSUM+134)/256*256
43 C
44       RG32 = CONS*JSUM - 6.0
45       RETURN
46 C         ENTRY TO INPUT SEED
47       ENTRY RG32IN (IDUMMY)
48       IY = IDUMMY
49       RG32IN = 0.
50       RETURN
51 C         ENTRY TO OUTPUT SEED
52       ENTRY RG32OT (IDUMMY)
53       IDUMMY = IY
54       RG32OT = 0.
55       RETURN
56       END