* * $Id: rndm.F,v 1.1.1.1 1996/02/15 17:50:21 mclareni Exp $ * * $Log: rndm.F,v $ * Revision 1.1.1.1 1996/02/15 17:50:21 mclareni * Kernlib * * FUNCTION RNDM (ISEED) C C CERN PROGLIB# V104 RNDM .VERSION KERNSUN 1.06 920511 C ORIG. 13-JULY-88 JZ from IBM version of G.Marsaglia et al., Montreal C C- Uniform Random Number Generator, C- giving the same sequence as the IBM and VAX version EQUIVALENCE (AMAN,MANT) SAVE MCGN DATA MCGN /12345/ MCGN = MCGN * 69069 #if defined(CERNLIB_BUGLRSHFT) MANT = ishft (MCGN, -8) #endif #if !defined(CERNLIB_BUGLRSHFT) MANT = lrshft (MCGN, 8) #endif IF (MANT.EQ.0) GO TO 14 AMAN = MANT C- AMAN in the range 1 to 2**24-1 C- - MANT = MANT - X'0C000000' MANT = MANT - 201326592 C- multiply by 2.**(-24) RNDM = AMAN RETURN C-- for zero set RNDM = 2.**(-25) C- 14 MANT = X'33000000' 14 MANT = 855638016 RNDM = AMAN RETURN C-- Integer random number ENTRY IRNDM (ISEED) MCGN = MCGN * 69069 C- - IRNDM = IAND (MCGN,X'7FFFFFFF') IRNDM = AND (MCGN, 2147483647) RETURN C-- Set the seed ENTRY RDMIN (ISEED) MCGN = ISEED RETURN C-- Get the seed ENTRY RDMOUT (ISEED) ISEED = MCGN END