D_RANDOM Library "JINRLIB" V107 Author: A.P.Sapojnikov Language: Fortran The Random Numbers Generator family Produces pseudorandom Real*8 numbers, uniformly distributed in open interval (0,1). For a while there are 2 different types of generators, depending upon input value of D_Random. Usage: ------ X=D_Random(N), where N = 1,2 - type of generator (INTEGER); X - (REAL*8) pseudorandom number in (0,1) range; RandomInitiate(i,k) - initialization with integer numbers i,k. N=1 The first description of this generator appeared in G.Marsaglia and A. Zaman, Toward a Universal Random Number Generator, Florida State University Report: FSU-SCRI-87-50 (1987). Generator has period 2^144. It is completely portable (gives the same series for all computers having floating point mantis length 48 bits or more). It's the fastest generator: only 5 floating point and 3 fixed point "Add"-instructions and no "Mult"-instructions used. Subroutine RandomInitiate(i,k) initializes generator with two integer numbers i and k ( 0 <= i <= 31328, 0 <= k <= 30081 ). This gives approximately 900000000 independent random series. Default initialization is: i=1802, k=9373. RandomInitiate defines the series only, the numbers inside the series starts from the beginning. The complete state of this generator contains in COMMON-block: COMMON /RanGen_Parameters/ istat(4),rstat(100) real*8 rstat D_Random(-999) gives istat(1) and istat(2), corresponding values of i and k for current series. N = 2 Portable random generator described in P.l'Ecuyer, Efficient and Portable Random Number Generators, Comm. ACM 31:743 (1988) 742. Subroutine RandomInitiate(i,k) like above initializes this generator with two integers i > 0 and k > 0. Default initialization is: i=1802, k=9373. These two numbers completely defines the state of generator. D_Random(-999) gives these values i and k. Example: -------- . . . implicit real*8 (a-h,o-z) . . . do i=1,5 write(*,'(2f18.14)') D_Random(1),D_Random(2) enddo . . . The result: ----------- .47444060942140 .85597053361232 .80073601515072 .38790535493994 .51635387886227 .14669151631475 .30258604127470 .19100434993394 .01901665275539 .71819570289829