home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Geek Gadgets 1
/
ADE-1.bin
/
ade-dist
/
octave-1.1.1p1-src.tgz
/
tar.out
/
fsf
/
octave
/
libcruft
/
ranlib
/
ignlgi.f
< prev
next >
Wrap
Text File
|
1996-09-28
|
2KB
|
78 lines
INTEGER FUNCTION ignlgi()
C**********************************************************************
C
C INTEGER FUNCTION IGNLGI()
C GeNerate LarGe Integer
C
C Returns a random integer following a uniform distribution over
C (1, 2147483562) using the current generator.
C
C This is a transcription from Pascal to Fortran of routine
C Random from the paper
C
C L'Ecuyer, P. and Cote, S. "Implementing a Random Number Package
C with Splitting Facilities." ACM Transactions on Mathematical
C Software, 17:98-111 (1991)
C
C**********************************************************************
C .. Parameters ..
INTEGER numg
PARAMETER (numg=32)
C ..
C .. Scalars in Common ..
INTEGER a1,a1vw,a1w,a2,a2vw,a2w,m1,m2
C ..
C .. Arrays in Common ..
INTEGER cg1(numg),cg2(numg),ig1(numg),ig2(numg),lg1(numg),
+ lg2(numg)
LOGICAL qanti(numg)
C ..
C .. Local Scalars ..
INTEGER curntg,k,s1,s2,z
LOGICAL qqssd
C ..
C .. External Functions ..
LOGICAL qrgnin
EXTERNAL qrgnin
C ..
C .. External Subroutines ..
EXTERNAL getcgn,inrgcm,rgnqsd,setall
C ..
C .. Common blocks ..
COMMON /globe/m1,m2,a1,a2,a1w,a2w,a1vw,a2vw,ig1,ig2,lg1,lg2,cg1,
+ cg2,qanti
C ..
C .. Save statement ..
SAVE /globe/
C ..
C .. Executable Statements ..
C
C IF THE RANDOM NUMBER PACKAGE HAS NOT BEEN INITIALIZED YET, DO SO.
C IT CAN BE INITIALIZED IN ONE OF TWO WAYS : 1) THE FIRST CALL TO
C THIS ROUTINE 2) A CALL TO SETALL.
C
IF (.NOT. (qrgnin())) CALL inrgcm()
CALL rgnqsd(qqssd)
IF (.NOT. (qqssd)) CALL setall(1234567890,123456789)
C
C Get Current Generator
C
CALL getcgn(curntg)
s1 = cg1(curntg)
s2 = cg2(curntg)
k = s1/53668
s1 = a1* (s1-k*53668) - k*12211
IF (s1.LT.0) s1 = s1 + m1
k = s2/52774
s2 = a2* (s2-k*52774) - k*3791
IF (s2.LT.0) s2 = s2 + m2
cg1(curntg) = s1
cg2(curntg) = s2
z = s1 - s2
IF (z.LT.1) z = z + m1 - 1
IF (qanti(curntg)) z = m1 - z
ignlgi = z
RETURN
END