*----------------------------------------------------------------------- * machine.f - front end to FORTRAN 95 machine constant routines *----------------------------------------------------------------------- FUNCTION rmachine (in) IMPLICIT NONE INTEGER in REAL rmachine, r DATA r / 1.0 / ! avoid compiler whimpering rmachine = 0. IF (in < 1 .OR. in > 3) RETURN IF (in .EQ. 1) THEN rmachine = EPSILON(r) ! machine precision ELSE IF (in .EQ. 2) THEN rmachine = TINY(r) ! smallest positive number ELSE IF (in .EQ. 3) THEN rmachine = HUGE(r) ! largest positive number END IF END ! of rmachine *----------------------------------------------------------------------- FUNCTION dmachine (in) IMPLICIT NONE INTEGER in DOUBLE PRECISION dmachine, d DATA d / 1D0 / dmachine = 0D0 IF (in < 1 .OR. in > 3) RETURN IF (in .EQ. 1) THEN dmachine = EPSILON(d) ! machine precision ELSE IF (in .EQ. 2) THEN dmachine = TINY(d) ! smallest positive number ELSE IF (in .EQ. 3) THEN dmachine = HUGE(d) ! largest positive number END IF END ! of dmachine *----------------------------------------------------------------------- FUNCTION imachine (in) IMPLICIT NONE INTEGER in, imachine, i REAL r DOUBLE PRECISION d DATA i, r, d / 1, 1.0, 1D0 / imachine = 0 IF (in < 1 .OR. in > 10) RETURN IF (in .EQ. 1) THEN imachine = RADIX(i) ELSE IF (in .EQ. 2) THEN imachine = BIT_SIZE(i) ELSE IF (in .EQ. 3) THEN imachine = HUGE(i) ELSE IF (in .EQ. 4) THEN imachine = RADIX(r) ELSE IF (in .EQ. 5) THEN imachine = DIGITS(r) ELSE IF (in .EQ. 6) THEN imachine = MINEXPONENT(r) ELSE IF (in .EQ. 7) THEN imachine = MAXEXPONENT(r) ELSE IF (in .EQ. 8) THEN imachine = DIGITS(d) ELSE IF (in .EQ. 9) THEN imachine = MINEXPONENT(d) ELSE IF (in .EQ. 10) THEN imachine = MAXEXPONENT(d) END IF END ! of imachine *++++++++++++++++++++++++++ End of file machine.f ++++++++++++++++++++++