* * $Id: rg32.F,v 1.1.1.1 1996/04/01 15:02:55 mclareni Exp $ * * $Log: rg32.F,v $ * Revision 1.1.1.1 1996/04/01 15:02:55 mclareni * Mathlib gen * * #include "gen/pilot.h" #if defined(CERNLIB_VAX) OPTIONS/CHECK=NOOVERFLOW #endif FUNCTION RG32(IDUMMY) #if defined(CERNLIB_CRAY) CDIR$ INTEGER=64 #endif C MACHINE-INDEPENDENT RANDOM NUMBER GENERATOR C PRODUCES GAUSSIAN-DISTRIBUTED FLOATING-PT. C NUMBERS OF MEAN ZERO AND VARIANCE ONE. C IDENTICAL SEQUENCE ON ALL MACHINES OF .GE. 32 BITS. C UNIVERSAL VERSION, F.JAMES, 1985 C IY IS THE SEED, C CONS IS 2**-23 C MASK31 IS 17777777777 OCTAL PARAMETER (CONS=1.1920928955078E-07, MASK31=2147483647) CSELF,IF=-IBM. CERN EDITLIB+SIEMENS COMPILER PROBLEM. SAVE IY CSELF. DATA IY/875949887/ C JSUM = 0 DO 50 LOOP= 1, 12 IY = IY * 69069 C KEEP ONLY LOWER 31 BITS IY = IAND (IY, MASK31) C SHIFT RIGHT 8 BITS TO AVOID OVFLO JY = IY /256 JSUM = JSUM + JY 50 CONTINUE C CORRECT FOR TRUNCATION BIAS AND ROUND TO NEAREST C EVEN BYTE TO ASSURE EXACT FLOAT JSUM = (JSUM+134)/256*256 C RG32 = CONS*JSUM - 6.0 RETURN C ENTRY TO INPUT SEED ENTRY RG32IN (IDUMMY) IY = IDUMMY RG32IN = 0. RETURN C ENTRY TO OUTPUT SEED ENTRY RG32OT (IDUMMY) IDUMMY = IY RG32OT = 0. RETURN END