140 SUBROUTINE zhst01( N, ILO, IHI, A, LDA, H, LDH, Q, LDQ, WORK,
141 $ LWORK, RWORK, RESULT )
149 INTEGER IHI, ILO, LDA, LDH, LDQ, LWORK, N
152 DOUBLE PRECISION RESULT( 2 ), RWORK( * )
153 COMPLEX*16 A( LDA, * ), H( LDH, * ), Q( LDQ, * ),
160 DOUBLE PRECISION ONE, ZERO
161 parameter( one = 1.0d+0, zero = 0.0d+0 )
165 DOUBLE PRECISION ANORM, EPS, OVFL, SMLNUM, UNFL, WNORM
168 DOUBLE PRECISION DLAMCH, ZLANGE
169 EXTERNAL dlamch, zlange
175 INTRINSIC dcmplx, max, min
187 unfl = dlamch(
'Safe minimum' )
188 eps = dlamch(
'Precision' )
191 smlnum = unfl*n / eps
198 CALL zlacpy(
' ', n, n, a, lda, work, ldwork )
202 CALL zgemm(
'No transpose',
'No transpose', n, n, n,
203 $ dcmplx( one ), q, ldq, h, ldh, dcmplx( zero ),
204 $ work( ldwork*n+1 ), ldwork )
208 CALL zgemm(
'No transpose',
'Conjugate transpose', n, n, n,
209 $ dcmplx( -one ), work( ldwork*n+1 ), ldwork, q, ldq,
210 $ dcmplx( one ), work, ldwork )
212 anorm = max( zlange(
'1', n, n, a, lda, rwork ), unfl )
213 wnorm = zlange(
'1', n, n, work, ldwork, rwork )
217 result( 1 ) = min( wnorm, anorm ) / max( smlnum, anorm*eps ) / n
221 CALL zunt01(
'Columns', n, n, q, ldq, work, lwork, rwork,