92 SUBROUTINE dladiv( A, B, C, D, P, Q )
100 DOUBLE PRECISION a,
b, c, d, p, q
107 parameter( bs = 2.0d0 )
108 DOUBLE PRECISION half
109 parameter( half = 0.5d0 )
111 parameter( two = 2.0d0 )
114 DOUBLE PRECISION aa, bb, cc, dd, ab, cd, s, ov, un, be, eps
132 ab = max( abs(a), abs(
b) )
133 cd = max( abs(c), abs(d) )
136 ov =
dlamch(
'Overflow threshold' )
137 un =
dlamch(
'Safe minimum' )
141 IF( ab >= half*ov )
THEN
146 IF( cd >= half*ov )
THEN
151 IF( ab <= un*bs/eps )
THEN
156 IF( cd <= un*bs/eps )
THEN
161 IF( abs( d ).LE.abs( c ) )
THEN
162 CALL
dladiv1(aa, bb, cc, dd, p, q)
164 CALL
dladiv1(bb, aa, dd, cc, p, q)
186 DOUBLE PRECISION a,
b, c, d, p, q
193 parameter( one = 1.0d0 )
196 DOUBLE PRECISION r, t
205 t = one / (c + d * r)
216 DOUBLE PRECISION FUNCTION dladiv2( A, B, C, D, R, T )
224 DOUBLE PRECISION a,
b, c, d, r, t
230 DOUBLE PRECISION zero
231 parameter( zero = 0.0d0 )
240 if( br.NE.zero )
THEN
double precision function dladiv2(A, B, C, D, R, T)
set ue cd $ADTTMP cat<< EOF > tmp f Program LinearEquations Implicit none Real b(3) integer i
double precision function dlamch(CMACH)
DLAMCH
subroutine dladiv(A, B, C, D, P, Q)
DLADIV performs complex division in real arithmetic, avoiding unnecessary overflow.
subroutine dladiv1(A, B, C, D, P, Q)