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