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