xref: /aosp_15_r20/external/eigen/lapack/dladiv.f (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li*> \brief \b DLADIV
2*bf2c3715SXin Li*
3*bf2c3715SXin Li*  =========== DOCUMENTATION ===========
4*bf2c3715SXin Li*
5*bf2c3715SXin Li* Online html documentation available at
6*bf2c3715SXin Li*            http://www.netlib.org/lapack/explore-html/
7*bf2c3715SXin Li*
8*bf2c3715SXin Li*> \htmlonly
9*bf2c3715SXin Li*> Download DLADIV + dependencies
10*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.tgz?format=tgz&filename=/lapack/lapack_routine/dladiv.f">
11*bf2c3715SXin Li*> [TGZ]</a>
12*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.zip?format=zip&filename=/lapack/lapack_routine/dladiv.f">
13*bf2c3715SXin Li*> [ZIP]</a>
14*bf2c3715SXin Li*> <a href="http://www.netlib.org/cgi-bin/netlibfiles.txt?format=txt&filename=/lapack/lapack_routine/dladiv.f">
15*bf2c3715SXin Li*> [TXT]</a>
16*bf2c3715SXin Li*> \endhtmlonly
17*bf2c3715SXin Li*
18*bf2c3715SXin Li*  Definition:
19*bf2c3715SXin Li*  ===========
20*bf2c3715SXin Li*
21*bf2c3715SXin Li*       SUBROUTINE DLADIV( A, B, C, D, P, Q )
22*bf2c3715SXin Li*
23*bf2c3715SXin Li*       .. Scalar Arguments ..
24*bf2c3715SXin Li*       DOUBLE PRECISION   A, B, C, D, P, Q
25*bf2c3715SXin Li*       ..
26*bf2c3715SXin Li*
27*bf2c3715SXin Li*
28*bf2c3715SXin Li*> \par Purpose:
29*bf2c3715SXin Li*  =============
30*bf2c3715SXin Li*>
31*bf2c3715SXin Li*> \verbatim
32*bf2c3715SXin Li*>
33*bf2c3715SXin Li*> DLADIV performs complex division in  real arithmetic
34*bf2c3715SXin Li*>
35*bf2c3715SXin Li*>                       a + i*b
36*bf2c3715SXin Li*>            p + i*q = ---------
37*bf2c3715SXin Li*>                       c + i*d
38*bf2c3715SXin Li*>
39*bf2c3715SXin Li*> The algorithm is due to Robert L. Smith and can be found
40*bf2c3715SXin Li*> in D. Knuth, The art of Computer Programming, Vol.2, p.195
41*bf2c3715SXin Li*> \endverbatim
42*bf2c3715SXin Li*
43*bf2c3715SXin Li*  Arguments:
44*bf2c3715SXin Li*  ==========
45*bf2c3715SXin Li*
46*bf2c3715SXin Li*> \param[in] A
47*bf2c3715SXin Li*> \verbatim
48*bf2c3715SXin Li*>          A is DOUBLE PRECISION
49*bf2c3715SXin Li*> \endverbatim
50*bf2c3715SXin Li*>
51*bf2c3715SXin Li*> \param[in] B
52*bf2c3715SXin Li*> \verbatim
53*bf2c3715SXin Li*>          B is DOUBLE PRECISION
54*bf2c3715SXin Li*> \endverbatim
55*bf2c3715SXin Li*>
56*bf2c3715SXin Li*> \param[in] C
57*bf2c3715SXin Li*> \verbatim
58*bf2c3715SXin Li*>          C is DOUBLE PRECISION
59*bf2c3715SXin Li*> \endverbatim
60*bf2c3715SXin Li*>
61*bf2c3715SXin Li*> \param[in] D
62*bf2c3715SXin Li*> \verbatim
63*bf2c3715SXin Li*>          D is DOUBLE PRECISION
64*bf2c3715SXin Li*>          The scalars a, b, c, and d in the above expression.
65*bf2c3715SXin Li*> \endverbatim
66*bf2c3715SXin Li*>
67*bf2c3715SXin Li*> \param[out] P
68*bf2c3715SXin Li*> \verbatim
69*bf2c3715SXin Li*>          P is DOUBLE PRECISION
70*bf2c3715SXin Li*> \endverbatim
71*bf2c3715SXin Li*>
72*bf2c3715SXin Li*> \param[out] Q
73*bf2c3715SXin Li*> \verbatim
74*bf2c3715SXin Li*>          Q is DOUBLE PRECISION
75*bf2c3715SXin Li*>          The scalars p and q in the above expression.
76*bf2c3715SXin Li*> \endverbatim
77*bf2c3715SXin Li*
78*bf2c3715SXin Li*  Authors:
79*bf2c3715SXin Li*  ========
80*bf2c3715SXin Li*
81*bf2c3715SXin Li*> \author Univ. of Tennessee
82*bf2c3715SXin Li*> \author Univ. of California Berkeley
83*bf2c3715SXin Li*> \author Univ. of Colorado Denver
84*bf2c3715SXin Li*> \author NAG Ltd.
85*bf2c3715SXin Li*
86*bf2c3715SXin Li*> \date November 2011
87*bf2c3715SXin Li*
88*bf2c3715SXin Li*> \ingroup auxOTHERauxiliary
89*bf2c3715SXin Li*
90*bf2c3715SXin Li*  =====================================================================
91*bf2c3715SXin Li      SUBROUTINE DLADIV( A, B, C, D, P, Q )
92*bf2c3715SXin Li*
93*bf2c3715SXin Li*  -- LAPACK auxiliary routine (version 3.4.0) --
94*bf2c3715SXin Li*  -- LAPACK is a software package provided by Univ. of Tennessee,    --
95*bf2c3715SXin Li*  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
96*bf2c3715SXin Li*     November 2011
97*bf2c3715SXin Li*
98*bf2c3715SXin Li*     .. Scalar Arguments ..
99*bf2c3715SXin Li      DOUBLE PRECISION   A, B, C, D, P, Q
100*bf2c3715SXin Li*     ..
101*bf2c3715SXin Li*
102*bf2c3715SXin Li*  =====================================================================
103*bf2c3715SXin Li*
104*bf2c3715SXin Li*     .. Local Scalars ..
105*bf2c3715SXin Li      DOUBLE PRECISION   E, F
106*bf2c3715SXin Li*     ..
107*bf2c3715SXin Li*     .. Intrinsic Functions ..
108*bf2c3715SXin Li      INTRINSIC          ABS
109*bf2c3715SXin Li*     ..
110*bf2c3715SXin Li*     .. Executable Statements ..
111*bf2c3715SXin Li*
112*bf2c3715SXin Li      IF( ABS( D ).LT.ABS( C ) ) THEN
113*bf2c3715SXin Li         E = D / C
114*bf2c3715SXin Li         F = C + D*E
115*bf2c3715SXin Li         P = ( A+B*E ) / F
116*bf2c3715SXin Li         Q = ( B-A*E ) / F
117*bf2c3715SXin Li      ELSE
118*bf2c3715SXin Li         E = C / D
119*bf2c3715SXin Li         F = D + C*E
120*bf2c3715SXin Li         P = ( B+A*E ) / F
121*bf2c3715SXin Li         Q = ( -A+B*E ) / F
122*bf2c3715SXin Li      END IF
123*bf2c3715SXin Li*
124*bf2c3715SXin Li      RETURN
125*bf2c3715SXin Li*
126*bf2c3715SXin Li*     End of DLADIV
127*bf2c3715SXin Li*
128*bf2c3715SXin Li      END
129