GNU Octave 10.1.0
A high-level interpreted language, primarily intended for numerical computations, mostly compatible with Matlab
 
Loading...
Searching...
No Matches
zs1s2.f
Go to the documentation of this file.
1 SUBROUTINE zs1s2(ZRR, ZRI, S1R, S1I, S2R, S2I, NZ, ASCLE, ALIM,
2 * IUF)
3C***BEGIN PROLOGUE ZS1S2
4C***REFER TO ZBESK,ZAIRY
5C
6C ZS1S2 TESTS FOR A POSSIBLE UNDERFLOW RESULTING FROM THE
7C ADDITION OF THE I AND K FUNCTIONS IN THE ANALYTIC CON-
8C TINUATION FORMULA WHERE S1=K FUNCTION AND S2=I FUNCTION.
9C ON KODE=1 THE I AND K FUNCTIONS ARE DIFFERENT ORDERS OF
10C MAGNITUDE, BUT FOR KODE=2 THEY CAN BE OF THE SAME ORDER
11C OF MAGNITUDE AND THE MAXIMUM MUST BE AT LEAST ONE
12C PRECISION ABOVE THE UNDERFLOW LIMIT.
13C
14C***ROUTINES CALLED XZABS,XZEXP,XZLOG
15C***END PROLOGUE ZS1S2
16C COMPLEX CZERO,C1,S1,S1D,S2,ZR
17 DOUBLE PRECISION AA, ALIM, ALN, ASCLE, AS1, AS2, C1I, C1R, S1DI,
18 * s1dr, s1i, s1r, s2i, s2r, zeroi, zeror, zri, zrr, xzabs
19 INTEGER IUF, IDUM, NZ
20 DATA zeror,zeroi / 0.0d0 , 0.0d0 /
21 nz = 0
22 as1 = xzabs(s1r,s1i)
23 as2 = xzabs(s2r,s2i)
24 IF (s1r.EQ.0.0d0 .AND. s1i.EQ.0.0d0) GO TO 10
25 IF (as1.EQ.0.0d0) GO TO 10
26 aln = -zrr - zrr + dlog(as1)
27 s1dr = s1r
28 s1di = s1i
29 s1r = zeror
30 s1i = zeroi
31 as1 = zeror
32 IF (aln.LT.(-alim)) GO TO 10
33 CALL xzlog(s1dr, s1di, c1r, c1i, idum)
34 c1r = c1r - zrr - zrr
35 c1i = c1i - zri - zri
36 CALL xzexp(c1r, c1i, s1r, s1i)
37 as1 = xzabs(s1r,s1i)
38 iuf = iuf + 1
39 10 CONTINUE
40 aa = dmax1(as1,as2)
41 IF (aa.GT.ascle) RETURN
42 s1r = zeror
43 s1i = zeroi
44 s2r = zeror
45 s2i = zeroi
46 nz = 1
47 iuf = 0
48 RETURN
49 END
double precision function xzabs(zr, zi)
Definition xzabs.f:2
subroutine xzexp(ar, ai, br, bi)
Definition xzexp.f:2
subroutine xzlog(ar, ai, br, bi, ierr)
Definition xzlog.f:2
subroutine zs1s2(zrr, zri, s1r, s1i, s2r, s2i, nz, ascle, alim, iuf)
Definition zs1s2.f:3