1 SUBROUTINE DIVP
(XXXX
,YYYY
,ZZZZ
,IERR
)
3 C THIS SUBROUTINE PERFORMS DIVISION OF COMPLEX NUMBERS:
8 C XXXX IS AN ARRAY OF LENGTH TWO REPRESENTING THE FIRST COMPLEX
9 C NUMBER, WHERE XXXX(1) = REAL PART OF XXXX AND XXXX(2) =
10 C IMAGINARY PART OF XXXX.
12 C YYYY IS AN ARRAY OF LENGTH TWO REPRESENTING THE SECOND COMPLEX
13 C NUMBER, WHERE YYYY(1) = REAL PART OF YYYY AND YYYY(2) =
14 C IMAGINARY PART OF YYYY.
18 C ZZZZ IS AN ARRAY OF LENGTH TWO REPRESENTING THE RESULT OF
19 C THE DIVISION, ZZZZ = XXXX/YYYY, WHERE ZZZZ(1) =
20 C REAL PART OF ZZZZ AND ZZZZ(2) = IMAGINARY PART OF ZZZZ.
23 C 1 IF DIVISION WOULD HAVE CAUSED OVERFLOW. IN THIS CASE, THE
24 C APPROPRIATE PARTS OF ZZZZ ARE SET EQUAL TO THE LARGEST
25 C FLOATING POINT NUMBER, AS GIVEN BY FUNCTION D1MACH .
27 C 0 IF DIVISION DOES NOT CAUSE OVERFLOW.
29 C DECLARATION OF INPUT
30 DOUBLE PRECISION XXXX
,YYYY
31 DIMENSION XXXX
(2),YYYY
(2)
33 C DECLARATION OF OUTPUT
38 C DECLARATION OF VARIABLES
39 DOUBLE PRECISION DENOM
,XNUM
,D1MACH
42 DENOM
= YYYY
(1)*YYYY
(1) + YYYY
(2)*YYYY
(2)
43 XNUM
= XXXX
(1)*YYYY
(1) + XXXX
(2)*YYYY
(2)
44 IF (ABS
(DENOM
) .GE
. 1.0 .OR
. ( ABS
(DENOM
) .LT
. 1.0 .AND
.
45 $ ABS
(XNUM
)/D1MACH
(2) .LT
. ABS
(DENOM
) ) ) THEN
51 XNUM
= XXXX
(2)*YYYY
(1) - XXXX
(1)*YYYY
(2)
52 IF (ABS
(DENOM
) .GE
. 1.0 .OR
. ( ABS
(DENOM
) .LT
. 1.0 .AND
.
53 $ ABS
(XNUM
)/D1MACH
(2) .LT
. ABS
(DENOM
) ) ) THEN