134 SUBROUTINE dhst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
143 INTEGER ihi, ilo, lda, ldh, ldq, lwork, n
146 DOUBLE PRECISION a( lda, * ), h( ldh, * ), q( ldq, * ),
147 $ result( 2 ), work( lwork )
153 DOUBLE PRECISION one, zero
154 parameter( one = 1.0d+0, zero = 0.0d+0 )
158 DOUBLE PRECISION anorm, eps, ovfl, smlnum, unfl, wnorm
180 unfl =
dlamch(
'Safe minimum' )
181 eps =
dlamch(
'Precision' )
184 smlnum = unfl*n / eps
191 CALL
dlacpy(
' ', n, n, a, lda, work, ldwork )
195 CALL
dgemm(
'No transpose',
'No transpose', n, n, n, one, q, ldq,
196 $ h, ldh, zero, work( ldwork*n+1 ), ldwork )
200 CALL
dgemm(
'No transpose',
'Transpose', n, n, n, -one,
201 $ work( ldwork*n+1 ), ldwork, q, ldq, one, work,
204 anorm = max(
dlange(
'1', n, n, a, lda, work( ldwork*n+1 ) ),
206 wnorm =
dlange(
'1', n, n, work, ldwork, work( ldwork*n+1 ) )
210 result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
214 CALL
dort01(
'Columns', n, n, q, ldq, work, lwork, result( 2 ) )