110 SUBROUTINE sbdt02( M, N, B, LDB, C, LDC, U, LDU, WORK, RESID )
117 INTEGER LDB, LDC, LDU, M, N
121 REAL B( LDB, * ), C( LDC, * ), U( LDU, * ),
129 parameter( zero = 0.0e+0, one = 1.0e+0 )
133 REAL BNORM, EPS, REALMN
136 REAL SASUM, SLAMCH, SLANGE
137 EXTERNAL sasum, slamch, slange
143 INTRINSIC max, min, real
150 IF( m.LE.0 .OR. n.LE.0 )
152 realmn = real( max( m, n ) )
153 eps = slamch(
'Precision' )
158 CALL scopy( m, b( 1, j ), 1, work, 1 )
159 CALL sgemv(
'No transpose', m, m, -one, u, ldu, c( 1, j ), 1,
161 resid = max( resid, sasum( m, work, 1 ) )
166 bnorm = slange(
'1', m, n, b, ldb, work )
168 IF( bnorm.LE.zero )
THEN
172 IF( bnorm.GE.resid )
THEN
173 resid = ( resid / bnorm ) / ( realmn*eps )
175 IF( bnorm.LT.one )
THEN
176 resid = ( min( resid, realmn*bnorm ) / bnorm ) /
179 resid = min( resid / bnorm, realmn ) / ( realmn*eps )
subroutine scopy(N, SX, INCX, SY, INCY)
SCOPY
subroutine sgemv(TRANS, M, N, ALPHA, A, LDA, X, INCX, BETA, Y, INCY)
SGEMV
subroutine sbdt02(M, N, B, LDB, C, LDC, U, LDU, WORK, RESID)
SBDT02