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