PROGRAM machine1
!
! Author:  Br. David Carlson
!
! Date:  January 3, 2000
!
! Revised:  May 2, 2004
!
! This program prints the values of certain machine constants.

IMPLICIT NONE

REAL::R1MACH, ans
INTEGER::k

k = 1
ans = 0

ans = R1MACH(1)
WRITE (*, 100) ans
100 FORMAT (1X, 'The smallest positive magnitude = ', E17.8)

WRITE (*, 150) TINY(ans)
150 FORMAT (1X, 'The smallest positive real according to TINY() = ', E17.8)

ans = R1MACH(2)
WRITE (*, 200) ans
200 FORMAT (1X, 'The largest magnitude = ', E17.8)

ans = R1MACH(3)
WRITE (*, 300) ans
300 FORMAT (1X, 'The smallest relative spacing = ', E17.8)

ans = R1MACH(4)
WRITE (*, 400) ans
400 FORMAT (1X, 'The largest relative spacing = ', E17.8)

ans = R1MACH(5)
WRITE (*, 500) ans
500 FORMAT (1X, 'LOG10(B) = ', E17.8)

WRITE (*, 600) BIT_SIZE(k)
600 FORMAT (1X, 'Number of bits in an integer = ', I3)

WRITE (*, 700) RANGE(k)
700 FORMAT (1X, 'Exponent range (in decimal) for integers = ', I2)

WRITE (*, 800) RANGE(ans)
800 FORMAT (1X, 'Exponent range (in decimal) for reals = ', I3)

WRITE (*, 900) PRECISION(ans)
900 FORMAT (1X, 'Precision (number of decimal digits) for reals = ', I2)

END PROGRAM

