clnrel.f 958 Bytes
complex function clnrel (z)
c april 1977 version.  w. fullerton, c3, los alamos scientific lab.
c
c clnrel(z) = clog(1+z) with relative error accuracy near z = 0.
c let   rho = cabs(z)  and
c       r**2 = cabs(1+z)**2 = (1+x)**2 + y**2 = 1 + 2*x + rho**2 .
c now if rho is small we may evaluate clnrel(z) accurately by
c       clog(1+z) = cmplx (alog(r), carg(1+z))
c                 = cmplx (0.5*alog(r**2), carg(1+z))
c                 = cmplx (0.5*alnrel(2*x+rho**2), carg(1+z))
c
      complex z, clog
      external alnrel, carg,  r1mach
      data sqeps /0.0/
c
      if (sqeps.eq.0.) sqeps = sqrt (r1mach(4))
c
      if (cabs(1.+z).lt.sqeps) call seteru (
     1  54hclnrel  answer lt half precision because z too near -1, 54,
     2  1, 1)
c
      rho = cabs(z)
      if (rho.gt.0.375) clnrel = clog (1.0+z)
      if (rho.gt.0.375) return
c
      x = real(z)
      clnrel = cmplx (0.5*alnrel(2.*x+rho**2), carg(1.0+z))
c
      return
      end