Remove references to the obsolete srrat function
[maxima.git] / share / hompack / fortran / powp.f
blobc6f8d6882045dbda9fad63a2e52a21a52167fb70
1 SUBROUTINE POWP(NNNN,XXXX,YYYY)
3 C THIS SUBROUTINE TAKES A NON-NEGATIVE POWER OF A COMPLEX NUMBER:
4 C YYYY = XXXX**NNNN USING DE MOIVRE'S FORMULA:
6 C YYYY = R**NNNN * (COS(NNNN*THETA),SIN(NNNN*THETA)),
8 C WHERE R=DNRM2(2,XXXX,1) AND THETA=ATAN2(XXXX(2),XXXX(1)).
10 C NOTE: POWP SETS 0**0 EQUAL TO 1.
12 C ON INPUT:
14 C NNNN IS A NON-NEGATIVE INTEGER.
16 C XXXX IS AN ARRAY OF LENGTH TWO REPRESENTING A COMPLEX
17 C NUMBER, WHERE XXXX(1) = REAL PART OF XXXX AND XXXX(2) =
18 C IMAGINARY PART OF XXXX.
20 C ON OUTPUT:
22 C YYYY IS AN ARRAY OF LENGTH TWO REPRESENTING THE RESULT OF
23 C THE POWER, YYYY = XXXX**NNNN, WHERE YYYY(1) =
24 C REAL PART OF YYYY AND YYYY(2) = IMAGINARY PART OF YYYY.
26 C SUBROUTINES: COS, SIN, ATAN2, DNRM2
28 C DECLARATION OF INPUT
29 INTEGER NNNN
30 DOUBLE PRECISION XXXX
31 DIMENSION XXXX(2)
33 C DECLARATION OF OUTPUT
34 DOUBLE PRECISION YYYY
35 DIMENSION YYYY(2)
37 C DECLARATION OF VARIABLES
38 DOUBLE PRECISION R,RR,T,TT
40 C DECLARATION OF FUNCTIONS
41 DOUBLE PRECISION DNRM2
43 IF (NNNN .EQ. 0) THEN
44 YYYY(1)=1.
45 YYYY(2)=0.
46 RETURN
47 ENDIF
48 IF (NNNN .EQ. 1) THEN
49 YYYY(1)=XXXX(1)
50 YYYY(2)=XXXX(2)
51 RETURN
52 ENDIF
53 R = DNRM2(2,XXXX,1)
54 IF (R .EQ. 0.0) THEN
55 YYYY(1)=0.0
56 YYYY(2)=0.0
57 RETURN
58 END IF
59 RR= R**NNNN
60 T = ATAN2(XXXX(2),XXXX(1))
61 TT= NNNN*T
62 YYYY(1) = RR*COS(TT)
63 YYYY(2) = RR*SIN(TT)
64 RETURN
65 END