c=========================================================== c Demonstrates use of the real*8 (pseudo-)random number c generator, 'drand48' available on the lnx machines via c the 'p410f' utility library. c c usage: tdrand48 [] c c where is the number of random numbers on the c interval (0..1) to be generated, and is the c optional, integer-valued "seed" for the random number c generator. c c The program outputs the random numbers generated to c standard output (one per line), and their average to c standard error. In the limit of very large , c this average should approach 0.5 since 'drand48' c generates numbers uniformly distributed on the unit c interval. c c Note carefully that for fixed seed, 'drand48' (and c most other pseudo-random number generators) will c ALWAYS RETURN THE SAME SEQUENCE OF NUMBERS! In c fact, the purpose of seeding the generator is precisely c to produce variation ("randomness") in the sequence c of iterates produced. If 'drand48' is not explicitly c seeded via 'srand48' a specific default seed value is c used. c=========================================================== program tdrand48 implicit none integer iargc, i4arg real*8 drand48 real*8 ranval, sum integer i, nrand if( iargc() .lt. 1 ) go to 900 nrand = i4arg(1,-1) if( nrand .le. 0 ) go to 900 if( iargc() .gt. 1 ) then call srand48(i4arg(2,0)) end if sum = 0.0d0 do i = 1 , nrand c----------------------------------------------------------- c Generate a random number c----------------------------------------------------------- ranval = drand48() sum = sum + ranval write(*,*) ranval end do write(0,*) write(0,*) 'Average: ', sum / nrand stop 900 continue write(0,*) 'usage: tdrand48 []' stop end