LAPACK  3.5.0
LAPACK: Linear Algebra PACKage
sladiv.f File Reference

Go to the source code of this file.

Functions/Subroutines

subroutine sladiv (A, B, C, D, P, Q)
 SLADIV performs complex division in real arithmetic, avoiding unnecessary overflow. More...
 
subroutine sladiv1 (A, B, C, D, P, Q)
 
real function sladiv2 (A, B, C, D, R, T)
 

Function/Subroutine Documentation

subroutine sladiv ( real  A,
real  B,
real  C,
real  D,
real  P,
real  Q 
)

SLADIV performs complex division in real arithmetic, avoiding unnecessary overflow.

Download SLADIV + dependencies [TGZ] [ZIP] [TXT]

Purpose:
 SLADIV performs complex division in  real arithmetic

                       a + i*b
            p + i*q = ---------
                       c + i*d

 The algorithm is due to Michael Baudin and Robert L. Smith
 and can be found in the paper
 "A Robust Complex Division in Scilab"
Parameters
[in]A
          A is REAL
[in]B
          B is REAL
[in]C
          C is REAL
[in]D
          D is REAL
          The scalars a, b, c, and d in the above expression.
[out]P
          P is REAL
[out]Q
          Q is REAL
          The scalars p and q in the above expression.
Author
Univ. of Tennessee
Univ. of California Berkeley
Univ. of Colorado Denver
NAG Ltd.
Date
January 2013

Definition at line 93 of file sladiv.f.

93 *
94 * -- LAPACK auxiliary routine (version 3.5.0) --
95 * -- LAPACK is a software package provided by Univ. of Tennessee, --
96 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
97 * January 2013
98 *
99 * .. Scalar Arguments ..
100  REAL a, b, c, d, p, q
101 * ..
102 *
103 * =====================================================================
104 *
105 * .. Parameters ..
106  REAL bs
107  parameter( bs = 2.0e0 )
108  REAL half
109  parameter( half = 0.5e0 )
110  REAL two
111  parameter( two = 2.0e0 )
112 *
113 * .. Local Scalars ..
114  REAL aa, bb, cc, dd, ab, cd, s, ov, un, be, eps
115 * ..
116 * .. External Functions ..
117  REAL slamch
118  EXTERNAL slamch
119 * ..
120 * .. External Subroutines ..
121  EXTERNAL sladiv1
122 * ..
123 * .. Intrinsic Functions ..
124  INTRINSIC abs, max
125 * ..
126 * .. Executable Statements ..
127 *
128  aa = a
129  bb = b
130  cc = c
131  dd = d
132  ab = max( abs(a), abs(b) )
133  cd = max( abs(c), abs(d) )
134  s = 1.0e0
135 
136  ov = slamch( 'Overflow threshold' )
137  un = slamch( 'Safe minimum' )
138  eps = slamch( 'Epsilon' )
139  be = bs / (eps*eps)
140 
141  IF( ab >= half*ov ) THEN
142  aa = half * aa
143  bb = half * bb
144  s = two * s
145  END IF
146  IF( cd >= half*ov ) THEN
147  cc = half * cc
148  dd = half * dd
149  s = half * s
150  END IF
151  IF( ab <= un*bs/eps ) THEN
152  aa = aa * be
153  bb = bb * be
154  s = s / be
155  END IF
156  IF( cd <= un*bs/eps ) THEN
157  cc = cc * be
158  dd = dd * be
159  s = s * be
160  END IF
161  IF( abs( d ).LE.abs( c ) ) THEN
162  CALL sladiv1(aa, bb, cc, dd, p, q)
163  ELSE
164  CALL sladiv1(bb, aa, dd, cc, p, q)
165  q = -q
166  END IF
167  p = p * s
168  q = q * s
169 *
170  RETURN
171 *
172 * End of SLADIV
173 *
subroutine sladiv1(A, B, C, D, P, Q)
Definition: sladiv.f:179
real function slamch(CMACH)
SLAMCH
Definition: slamch.f:69

Here is the call graph for this function:

Here is the caller graph for this function:

subroutine sladiv1 ( real  A,
real  B,
real  C,
real  D,
real  P,
real  Q 
)

Definition at line 179 of file sladiv.f.

179 *
180 * -- LAPACK auxiliary routine (version 3.5.0) --
181 * -- LAPACK is a software package provided by Univ. of Tennessee, --
182 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
183 * January 2013
184 *
185 * .. Scalar Arguments ..
186  REAL a, b, c, d, p, q
187 * ..
188 *
189 * =====================================================================
190 *
191 * .. Parameters ..
192  REAL one
193  parameter( one = 1.0e0 )
194 *
195 * .. Local Scalars ..
196  REAL r, t
197 * ..
198 * .. External Functions ..
199  REAL sladiv2
200  EXTERNAL sladiv2
201 * ..
202 * .. Executable Statements ..
203 *
204  r = d / c
205  t = one / (c + d * r)
206  p = sladiv2(a, b, c, d, r, t)
207  a = -a
208  q = sladiv2(b, a, c, d, r, t)
209 *
210  RETURN
211 *
212 * End of SLADIV1
213 *
real function sladiv2(A, B, C, D, R, T)
Definition: sladiv.f:217

Here is the caller graph for this function:

real function sladiv2 ( real  A,
real  B,
real  C,
real  D,
real  R,
real  T 
)

Definition at line 217 of file sladiv.f.

217 *
218 * -- LAPACK auxiliary routine (version 3.5.0) --
219 * -- LAPACK is a software package provided by Univ. of Tennessee, --
220 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
221 * January 2013
222 *
223 * .. Scalar Arguments ..
224  REAL a, b, c, d, r, t
225 * ..
226 *
227 * =====================================================================
228 *
229 * .. Parameters ..
230  REAL zero
231  parameter( zero = 0.0e0 )
232 *
233 * .. Local Scalars ..
234  REAL br
235 * ..
236 * .. Executable Statements ..
237 *
238  IF( r.NE.zero ) THEN
239  br = b * r
240  if( br.NE.zero ) THEN
241  sladiv2 = (a + br) * t
242  ELSE
243  sladiv2 = a * t + (b * t) * r
244  END IF
245  ELSE
246  sladiv2 = (a + d * (b / c)) * t
247  END IF
248 *
249  RETURN
250 *
251 * End of SLADIV
252 *
real function sladiv2(A, B, C, D, R, T)
Definition: sladiv.f:217