c=========================================================== c Computes and reports estimate of machine epsilon. c c Recall: machine epsilon is smallest positive 'eps' c such that c c (1.0d0 + eps ) .ne. (1.0d0) c c Program accepts optional argument which specifies c division factor: values close to 1.0 will result c in more accurate estimate of machine epsilon. c=========================================================== program meps implicit none c----------------------------------------------------------- c Note use of 'r8arg', available in 'libp410f.a' which c works exactly like 'i4arg' except that it returns c a real*8 value parsed from the specified command-line c argument c----------------------------------------------------------- real*8 r8arg real*8 default_fac parameter ( default_fac = 2.0d0 ) real*8 eps, neweps, fac fac = r8arg(1,default_fac) write(0,*) 'meps: using division factor: ', fac eps = 1.0d0 neweps = 1.0d0 do while( .true. ) if( 1.0d0 .eq. (1.0d0 + neweps) ) then write(*,*) eps stop else eps = neweps neweps = neweps / fac end if end do stop end