63 lines
1.4 KiB
FortranFixed
63 lines
1.4 KiB
FortranFixed
SUBROUTINE SLADIV( A, B, C, D, P, Q )
|
|
*
|
|
* -- LAPACK auxiliary routine (version 3.1) --
|
|
* Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
|
|
* November 2006
|
|
*
|
|
* .. Scalar Arguments ..
|
|
REAL A, B, C, D, P, Q
|
|
* ..
|
|
*
|
|
* Purpose
|
|
* =======
|
|
*
|
|
* SLADIV performs complex division in real arithmetic
|
|
*
|
|
* a + i*b
|
|
* p + i*q = ---------
|
|
* c + i*d
|
|
*
|
|
* The algorithm is due to Robert L. Smith and can be found
|
|
* in D. Knuth, The art of Computer Programming, Vol.2, p.195
|
|
*
|
|
* Arguments
|
|
* =========
|
|
*
|
|
* A (input) REAL
|
|
* B (input) REAL
|
|
* C (input) REAL
|
|
* D (input) REAL
|
|
* The scalars a, b, c, and d in the above expression.
|
|
*
|
|
* P (output) REAL
|
|
* Q (output) REAL
|
|
* The scalars p and q in the above expression.
|
|
*
|
|
* =====================================================================
|
|
*
|
|
* .. Local Scalars ..
|
|
REAL E, F
|
|
* ..
|
|
* .. Intrinsic Functions ..
|
|
INTRINSIC ABS
|
|
* ..
|
|
* .. Executable Statements ..
|
|
*
|
|
IF( ABS( D ).LT.ABS( C ) ) THEN
|
|
E = D / C
|
|
F = C + D*E
|
|
P = ( A+B*E ) / F
|
|
Q = ( B-A*E ) / F
|
|
ELSE
|
|
E = C / D
|
|
F = D + C*E
|
|
P = ( B+A*E ) / F
|
|
Q = ( -A+B*E ) / F
|
|
END IF
|
|
*
|
|
RETURN
|
|
*
|
|
* End of SLADIV
|
|
*
|
|
END
|