sladiv.f

          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