Skip to content

Commit d77d9bc

Browse files
authored
Handle norm NaN value (Reference LAPACK PR471)
1 parent 3a30c12 commit d77d9bc

File tree

4 files changed

+24
-8
lines changed

4 files changed

+24
-8
lines changed

lapack-netlib/SRC/cgesdd.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,9 @@ SUBROUTINE CGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
281281
$ CUNGQR, CUNMBR, SBDSDC, SLASCL, XERBLA
282282
* ..
283283
* .. External Functions ..
284-
LOGICAL LSAME
284+
LOGICAL LSAME, SISNAN
285285
REAL SLAMCH, CLANGE
286-
EXTERNAL LSAME, SLAMCH, CLANGE
286+
EXTERNAL LSAME, SLAMCH, CLANGE, SISNAN
287287
* ..
288288
* .. Intrinsic Functions ..
289289
INTRINSIC INT, MAX, MIN, SQRT
@@ -647,6 +647,10 @@ SUBROUTINE CGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
647647
* Scale A if max element outside range [SMLNUM,BIGNUM]
648648
*
649649
ANRM = CLANGE( 'M', M, N, A, LDA, DUM )
650+
IF( SISNAN ( ANRM ) ) THEN
651+
INFO = -4
652+
RETURN
653+
END IF
650654
ISCL = 0
651655
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
652656
ISCL = 1

lapack-netlib/SRC/dgesdd.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,9 @@ SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
267267
$ XERBLA
268268
* ..
269269
* .. External Functions ..
270-
LOGICAL LSAME
270+
LOGICAL LSAME, DISNAN
271271
DOUBLE PRECISION DLAMCH, DLANGE
272-
EXTERNAL DLAMCH, DLANGE, LSAME
272+
EXTERNAL DLAMCH, DLANGE, LSAME, DISNAN
273273
* ..
274274
* .. Intrinsic Functions ..
275275
INTRINSIC INT, MAX, MIN, SQRT
@@ -599,6 +599,10 @@ SUBROUTINE DGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
599599
* Scale A if max element outside range [SMLNUM,BIGNUM]
600600
*
601601
ANRM = DLANGE( 'M', M, N, A, LDA, DUM )
602+
IF( DISNAN( ANRM ) ) THEN
603+
INFO = -4
604+
RETURN
605+
END IF
602606
ISCL = 0
603607
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
604608
ISCL = 1

lapack-netlib/SRC/sgesdd.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -267,9 +267,9 @@ SUBROUTINE SGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
267267
$ XERBLA
268268
* ..
269269
* .. External Functions ..
270-
LOGICAL LSAME
270+
LOGICAL LSAME, SISNAN
271271
REAL SLAMCH, SLANGE
272-
EXTERNAL SLAMCH, SLANGE, LSAME
272+
EXTERNAL SLAMCH, SLANGE, LSAME, SISNAN
273273
* ..
274274
* .. Intrinsic Functions ..
275275
INTRINSIC INT, MAX, MIN, SQRT
@@ -599,6 +599,10 @@ SUBROUTINE SGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
599599
* Scale A if max element outside range [SMLNUM,BIGNUM]
600600
*
601601
ANRM = SLANGE( 'M', M, N, A, LDA, DUM )
602+
IF( SISNAN( ANRM ) ) THEN
603+
INFO = -4
604+
RETURN
605+
END IF
602606
ISCL = 0
603607
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
604608
ISCL = 1

lapack-netlib/SRC/zgesdd.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -281,9 +281,9 @@ SUBROUTINE ZGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
281281
$ ZLASET, ZUNGBR, ZUNGLQ, ZUNGQR, ZUNMBR
282282
* ..
283283
* .. External Functions ..
284-
LOGICAL LSAME
284+
LOGICAL LSAME, DISNAN
285285
DOUBLE PRECISION DLAMCH, ZLANGE
286-
EXTERNAL LSAME, DLAMCH, ZLANGE
286+
EXTERNAL LSAME, DLAMCH, ZLANGE, DISNAN
287287
* ..
288288
* .. Intrinsic Functions ..
289289
INTRINSIC INT, MAX, MIN, SQRT
@@ -647,6 +647,10 @@ SUBROUTINE ZGESDD( JOBZ, M, N, A, LDA, S, U, LDU, VT, LDVT,
647647
* Scale A if max element outside range [SMLNUM,BIGNUM]
648648
*
649649
ANRM = ZLANGE( 'M', M, N, A, LDA, DUM )
650+
IF( DISNAN( ANRM ) ) THEN
651+
INFO = -4
652+
RETURN
653+
END IF
650654
ISCL = 0
651655
IF( ANRM.GT.ZERO .AND. ANRM.LT.SMLNUM ) THEN
652656
ISCL = 1

0 commit comments

Comments
 (0)