      function beta (a, b)
c june 1977 edition.   w. fullerton, c3, los alamos scientific lab.
      external albeta, alog, exp, gamma, r1mach
      data xmax, alnsml /0., 0./
c
      if (xmax.ne.0.) go to 10
      call r9gaml (xmin, xmax)
      alnsml = alog(r1mach(1))
c
 10   if (a.le.0. .or. b.le.0.) call seteru (
     1  35hbeta    both arguments must be gt 0, 35, 2, 2)
c
      if (a+b.lt.xmax) beta = gamma(a) * gamma(b) / gamma(a+b)
      if (a+b.lt.xmax) return
c
      beta = albeta (a, b)
      if (beta.lt.alnsml) call seteru (
     1  41hbeta    a and/or b so big beta underflows, 41, 1, 2)
c
      beta = exp (beta)
c
      return
      end
