5 * Revision 1.1.1.1 1996/04/01 15:01:52 mclareni
10 #if defined(CERNLIB_DOUBLE)
11 SUBROUTINE DMULLZ(A,N,MAXITR,Z0)
13 #if !defined(CERNLIB_DOUBLE)
14 SUBROUTINE RMULLZ(A,N,MAXITR,Z0)
16 #include "gen/imp64.inc"
17 #include "gen/defc64.inc"
18 + Z0,Z,DX,X,X3,Y1,Y2,Y,TE(7)
20 DIMENSION A(0:*),Z0(*)
22 #if defined(CERNLIB_DOUBLE)
23 PARAMETER( NAME='DMULLZ')
25 #if !defined(CERNLIB_DOUBLE)
26 PARAMETER( NAME='RMULLZ')
28 PARAMETER (Z1 = 1, HF = Z1/2)
29 PARAMETER (ETA1 = 1D-14, ETA2 = 6D-8, BIG = 1D20)
30 PARAMETER (C1 = 0.9D0, C2 = 0.002D0, C3 = 0.1D0)
32 #include "gen/gcmpfun.inc"
33 SUMABS(Z)=ABS(GREAL(Z))+ABS(GIMAG(Z))
37 CALL MTLPRT(NAME,'C202.1','A(0) = 0')
52 SCALE=ABS(A(N1)/A(0))**(Z1/N1)
71 TE(3)=(Y1-Y2)/(Y*TE(1))
74 TE(5)=(TE(4)-TE(3))/(TE(1)+1)
75 TE(6)=HF*(TE(5)+TE(4))
76 TE(7)=SQRT(TE(6)**2+TE(5))
79 IF(ABS(TE(1)) .LE. ABS(TE(7))) THEN
80 IF(TE(7) .EQ. 0) TE(7)=C1
86 IF(SUMABS(DX) .LT. EPSI .AND. SUMABS(Y) .LT. C2) GO TO 18
93 15 IF(SUMABS(Y) .GE. 100*SUMABS(Y2) .AND. SUMABS(DX) .GE. EPSI) THEN
100 IF(Y .EQ. 0) GO TO 18
105 TE(3)=(TE(2)/TE(1))*TE(4)
109 IF(ABS(CN-1) .LT. C3) THEN
112 CALL MTLPRT(NAME,'C202.2','TOO MANY ITERATIONS')
123 20 IF(ABS(GIMAG(X)) .LT. ABS(GREAL(X))*ETA2) GO TO 10
132 IF(Y .EQ. 0) GO TO 18
138 IF(Y .EQ. 0) GO TO 18
144 IF(Y .NE. 0) GO TO 12
150 19 Z0(I)=Z0(I-1)*X+Z0(I)
156 1 Z0(2)=(SQRT((HF*Z0(1))**2-Z0(2))-HF*Z0(1))*SCALE
157 Z0(1)=-Z0(1)*SCALE-Z0(2)