diff options
author | james <james@8a072113-8704-0410-8d35-dd094bca7971> | 2011-02-24 21:12:23 +0000 |
---|---|---|
committer | james <james@8a072113-8704-0410-8d35-dd094bca7971> | 2011-02-24 21:12:23 +0000 |
commit | 27bef224d9e4e8fdadc0e33d70c98d9a10a0d149 (patch) | |
tree | d8005dbec53eb5d46e8bf290e350027c72e824df | |
parent | dc06e1f1e960f24583f9b305b93de1c355d7db09 (diff) | |
download | lapack-27bef224d9e4e8fdadc0e33d70c98d9a10a0d149.tar.gz lapack-27bef224d9e4e8fdadc0e33d70c98d9a10a0d149.tar.bz2 lapack-27bef224d9e4e8fdadc0e33d70c98d9a10a0d149.zip |
changed matrix norm to 'M' (max) from 'I' (inf) for scaling of input matrix
and added check for zero norm in xSTERF (the xSTEQR already had this check)
this fixes the issue reported in bug0036
-rw-r--r-- | SRC/dsteqr.f | 2 | ||||
-rw-r--r-- | SRC/dsterf.f | 9 | ||||
-rw-r--r-- | SRC/ssteqr.f | 2 | ||||
-rw-r--r-- | SRC/ssterf.f | 4 |
4 files changed, 11 insertions, 6 deletions
diff --git a/SRC/dsteqr.f b/SRC/dsteqr.f index a0ec5cdb..17a17468 100644 --- a/SRC/dsteqr.f +++ b/SRC/dsteqr.f @@ -195,7 +195,7 @@ * * Scale submatrix in rows and columns L to LEND * - ANORM = DLANST( 'I', LEND-L+1, D( L ), E( L ) ) + ANORM = DLANST( 'M', LEND-L+1, D( L ), E( L ) ) ISCALE = 0 IF( ANORM.EQ.ZERO ) $ GO TO 10 diff --git a/SRC/dsterf.f b/SRC/dsterf.f index 4f2a9bcf..74f289b6 100644 --- a/SRC/dsterf.f +++ b/SRC/dsterf.f @@ -54,7 +54,7 @@ $ NMAXIT DOUBLE PRECISION ALPHA, ANORM, BB, C, EPS, EPS2, GAMMA, OLDC, $ OLDGAM, P, R, RT1, RT2, RTE, S, SAFMAX, SAFMIN, - $ SIGMA, SSFMAX, SSFMIN + $ SIGMA, SSFMAX, SSFMIN, RMAX * .. * .. External Functions .. DOUBLE PRECISION DLAMCH, DLANST, DLAPY2 @@ -90,6 +90,7 @@ SAFMAX = ONE / SAFMIN SSFMAX = SQRT( SAFMAX ) / THREE SSFMIN = SQRT( SAFMIN ) / EPS2 + RMAX = DLAMCH( 'O' ) * * Compute the eigenvalues of the tridiagonal matrix. * @@ -128,9 +129,11 @@ * * Scale submatrix in rows and columns L to LEND * - ANORM = DLANST( 'I', LEND-L+1, D( L ), E( L ) ) + ANORM = DLANST( 'M', LEND-L+1, D( L ), E( L ) ) ISCALE = 0 - IF( ANORM.GT.SSFMAX ) THEN + IF( ANORM.EQ.ZERO ) + $ GO TO 10 + IF( (ANORM.GT.SSFMAX) ) THEN ISCALE = 1 CALL DLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L+1, 1, D( L ), N, $ INFO ) diff --git a/SRC/ssteqr.f b/SRC/ssteqr.f index 952fb502..835c82fc 100644 --- a/SRC/ssteqr.f +++ b/SRC/ssteqr.f @@ -195,7 +195,7 @@ * * Scale submatrix in rows and columns L to LEND * - ANORM = SLANST( 'I', LEND-L+1, D( L ), E( L ) ) + ANORM = SLANST( 'M', LEND-L+1, D( L ), E( L ) ) ISCALE = 0 IF( ANORM.EQ.ZERO ) $ GO TO 10 diff --git a/SRC/ssterf.f b/SRC/ssterf.f index a51c379d..b9110dd6 100644 --- a/SRC/ssterf.f +++ b/SRC/ssterf.f @@ -128,8 +128,10 @@ * * Scale submatrix in rows and columns L to LEND * - ANORM = SLANST( 'I', LEND-L+1, D( L ), E( L ) ) + ANORM = SLANST( 'M', LEND-L+1, D( L ), E( L ) ) ISCALE = 0 + IF( ANORM.EQ.ZERO ) + $ GO TO 10 IF( ANORM.GT.SSFMAX ) THEN ISCALE = 1 CALL SLASCL( 'G', 0, 0, ANORM, SSFMAX, LEND-L+1, 1, D( L ), N, |