File:  [local] / rpl / lapack / lapack / dladiv.f
Revision 1.1: download - view: text, annotated - select for diffs - revision graph
Tue Jan 26 15:22:45 2010 UTC (14 years, 3 months ago) by bertrand
Branches: MAIN
CVS tags: HEAD
Initial revision

    1:       SUBROUTINE DLADIV( A, B, C, D, P, Q )
    2: *
    3: *  -- LAPACK auxiliary routine (version 3.2) --
    4: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
    5: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
    6: *     November 2006
    7: *
    8: *     .. Scalar Arguments ..
    9:       DOUBLE PRECISION   A, B, C, D, P, Q
   10: *     ..
   11: *
   12: *  Purpose
   13: *  =======
   14: *
   15: *  DLADIV performs complex division in  real arithmetic
   16: *
   17: *                        a + i*b
   18: *             p + i*q = ---------
   19: *                        c + i*d
   20: *
   21: *  The algorithm is due to Robert L. Smith and can be found
   22: *  in D. Knuth, The art of Computer Programming, Vol.2, p.195
   23: *
   24: *  Arguments
   25: *  =========
   26: *
   27: *  A       (input) DOUBLE PRECISION
   28: *  B       (input) DOUBLE PRECISION
   29: *  C       (input) DOUBLE PRECISION
   30: *  D       (input) DOUBLE PRECISION
   31: *          The scalars a, b, c, and d in the above expression.
   32: *
   33: *  P       (output) DOUBLE PRECISION
   34: *  Q       (output) DOUBLE PRECISION
   35: *          The scalars p and q in the above expression.
   36: *
   37: *  =====================================================================
   38: *
   39: *     .. Local Scalars ..
   40:       DOUBLE PRECISION   E, F
   41: *     ..
   42: *     .. Intrinsic Functions ..
   43:       INTRINSIC          ABS
   44: *     ..
   45: *     .. Executable Statements ..
   46: *
   47:       IF( ABS( D ).LT.ABS( C ) ) THEN
   48:          E = D / C
   49:          F = C + D*E
   50:          P = ( A+B*E ) / F
   51:          Q = ( B-A*E ) / F
   52:       ELSE
   53:          E = C / D
   54:          F = D + C*E
   55:          P = ( B+A*E ) / F
   56:          Q = ( -A+B*E ) / F
   57:       END IF
   58: *
   59:       RETURN
   60: *
   61: *     End of DLADIV
   62: *
   63:       END

CVSweb interface <joel.bertrand@systella.fr>