]>
Commit | Line | Data |
---|---|---|
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) | |
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 |