Program test implicit none real*8 RF ! Generate a number between 1 and 12 Do write(*,*) int(1+RF(0)*12) pause end do end program !*********************************************************************** REAL*8 FUNCTION RF(IDUM) !--generates a uniformly distributed random fraction between 0 and 1 !----IDUM will generally be 0, but negative values may be used to re-initialize the seed SAVE MA,INEXT,INEXTP PARAMETER (MBIG=1000000000,MSEED=161803398,MZ=0,FAC=1.E-9) DIMENSION MA(55) DATA IFF/0/ IF (IDUM.LT.0.OR.IFF.EQ.0) THEN IFF=1 MJ=MSEED-IABS(IDUM) MJ=MOD(MJ,MBIG) MA(55)=MJ MK=1 DO 50 I=1,54 II=MOD(21*I,55) MA(II)=MK MK=MJ-MK IF (MK.LT.MZ) MK=MK+MBIG MJ=MA(II) 50 CONTINUE DO 100 K=1,4 DO 60 I=1,55 MA(I)=MA(I)-MA(1+MOD(I+30,55)) IF (MA(I).LT.MZ) MA(I)=MA(I)+MBIG 60 CONTINUE 100 CONTINUE INEXT=0 INEXTP=31 END IF 200 INEXT=INEXT+1 IF (INEXT.EQ.56) INEXT=1 INEXTP=INEXTP+1 IF (INEXTP.EQ.56) INEXTP=1 MJ=MA(INEXT)-MA(INEXTP) IF (MJ.LT.MZ) MJ=MJ+MBIG MA(INEXT)=MJ RF=MJ*FAC IF (RF.GT.1.E-8.AND.RF.LT.0.99999999) RETURN GO TO 200 END Function !******************************************************************