double precision function d1mach(i)
!
integer, intent(in) :: i
!
double precision :: x
!
  select case (i)
  case (1)
    d1mach = tiny(x)
  case (2)
    d1mach = huge(x)
  case (3)
    d1mach = real(radix(x),kind(x))**(-digits(x))
  case (4)
    d1mach = epsilon(x)
  case (5)
    d1mach = log10(real(radix(x),kind(x)))
  case default
    stop 'invalid argument to d1mach'
  end select
end function d1mach
