102 SUBROUTINE dstech( N, A, B, EIG, TOL, WORK, INFO )
114 DOUBLE PRECISION A( * ), B( * ), EIG( * ), WORK( * )
120 DOUBLE PRECISION ZERO
121 parameter ( zero = 0.0d0 )
124 INTEGER BPNT, COUNT, I, ISUB, J, NUML, NUMU, TPNT
125 DOUBLE PRECISION EMIN, EPS, LOWER, MX, TUPPR, UNFLEP, UPPER
128 DOUBLE PRECISION DLAMCH
148 IF( tol.LT.zero )
THEN
155 eps = dlamch(
'Epsilon' )*dlamch(
'Base' )
156 unflep = dlamch(
'Safe minimum' ) / eps
163 mx = max( mx, abs( eig( i ) ) )
165 eps = max( eps*mx, unflep )
175 DO 30 j = 2, n + 1 - i
176 IF( work( j ).LT.emin )
THEN
181 IF( isub.NE.n+1-i )
THEN
182 work( isub ) = work( n+1-i )
196 upper = work( tpnt ) + eps
197 lower = work( bpnt ) - eps
204 tuppr = work( bpnt+1 ) + eps
211 lower = work( bpnt ) - eps
217 CALL dstect( n, a, b, lower, numl )
218 CALL dstect( n, a, b, upper, numu )
220 IF( count.NE.bpnt-tpnt+1 )
THEN
subroutine dstect(N, A, B, SHIFT, NUM)
DSTECT
subroutine dstech(N, A, B, EIG, TOL, WORK, INFO)
DSTECH