96 SUBROUTINE dsvdch( N, S, E, SVD, TOL, INFO )
107 DOUBLE PRECISION E( * ), S( * ), SVD( * )
114 parameter( one = 1.0d0 )
115 DOUBLE PRECISION ZERO
116 parameter( zero = 0.0d0 )
119 INTEGER BPNT, COUNT, NUML, NUMU, TPNT
120 DOUBLE PRECISION EPS, LOWER, OVFL, TUPPR, UNFL, UNFLEP, UPPER
123 DOUBLE PRECISION DLAMCH
139 unfl = dlamch(
'Safe minimum' )
140 ovfl = dlamch(
'Overflow' )
141 eps = dlamch(
'Epsilon' )*dlamch(
'Base' )
147 unflep = ( sqrt( sqrt( unfl ) ) / sqrt( ovfl ) )*svd( 1 ) +
152 eps = tol*max( n / 10, 1 )*eps
163 upper = ( one+eps )*svd( tpnt ) + unflep
164 lower = ( one-eps )*svd( bpnt ) - unflep
165 IF( lower.LE.unflep )
173 tuppr = ( one+eps )*svd( bpnt+1 ) + unflep
180 lower = ( one-eps )*svd( bpnt ) - unflep
181 IF( lower.LE.unflep )
188 CALL dsvdct( n, s, e, lower, numl )
189 CALL dsvdct( n, s, e, upper, numu )
193 IF( count.NE.bpnt-tpnt+1 )
THEN
subroutine dsvdch(n, s, e, svd, tol, info)
DSVDCH
subroutine dsvdct(n, s, e, shift, num)
DSVDCT