GNU Octave  3.8.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
xzlog.f
Go to the documentation of this file.
1  SUBROUTINE xzlog(AR, AI, BR, BI, IERR)
2 C***BEGIN PROLOGUE XZLOG
3 C***REFER TO ZBESH,ZBESI,ZBESJ,ZBESK,ZBESY,ZAIRY,ZBIRY
4 C
5 C DOUBLE PRECISION COMPLEX LOGARITHM B=CLOG(A)
6 C IERR=0,NORMAL RETURN IERR=1, Z=CMPLX(0.0,0.0)
7 C***ROUTINES CALLED XZABS
8 C***END PROLOGUE XZLOG
9  DOUBLE PRECISION ar, ai, br, bi, zm, dtheta, dpi, dhpi
10  DOUBLE PRECISION xzabs
11  DATA dpi , dhpi / 3.141592653589793238462643383d+0,
12  1 1.570796326794896619231321696d+0/
13 C
14  ierr=0
15  IF (ar.EQ.0.0d+0) go to 10
16  IF (ai.EQ.0.0d+0) go to 20
17  dtheta = datan(ai/ar)
18  IF (dtheta.LE.0.0d+0) go to 40
19  IF (ar.LT.0.0d+0) dtheta = dtheta - dpi
20  go to 50
21  10 IF (ai.EQ.0.0d+0) go to 60
22  bi = dhpi
23  br = dlog(dabs(ai))
24  IF (ai.LT.0.0d+0) bi = -bi
25  RETURN
26  20 IF (ar.GT.0.0d+0) go to 30
27  br = dlog(dabs(ar))
28  bi = dpi
29  RETURN
30  30 br = dlog(ar)
31  bi = 0.0d+0
32  RETURN
33  40 IF (ar.LT.0.0d+0) dtheta = dtheta + dpi
34  50 zm = xzabs(ar,ai)
35  br = dlog(zm)
36  bi = dtheta
37  RETURN
38  60 CONTINUE
39  ierr=1
40  RETURN
41  END