Skip to content

Commit 37d3e2b

Browse files
authored
Merge pull request #3210 from martin-frbg/lapack502
Fix possible division by zero in LAPACK xTGSJA (Reference-LAPACK PR502)
2 parents d43e071 + de86567 commit 37d3e2b

File tree

4 files changed

+20
-16
lines changed

4 files changed

+20
-16
lines changed

lapack-netlib/SRC/ctgsja.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ SUBROUTINE CTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
401401
* .. Parameters ..
402402
INTEGER MAXIT
403403
PARAMETER ( MAXIT = 40 )
404-
REAL ZERO, ONE
404+
REAL ZERO, ONE, HUGENUM
405405
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
406406
COMPLEX CZERO, CONE
407407
PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ),
@@ -424,7 +424,8 @@ SUBROUTINE CTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
424424
$ SLARTG, XERBLA
425425
* ..
426426
* .. Intrinsic Functions ..
427-
INTRINSIC ABS, CONJG, MAX, MIN, REAL
427+
INTRINSIC ABS, CONJG, MAX, MIN, REAL, HUGE
428+
PARAMETER ( HUGENUM = HUGE(ZERO) )
428429
* ..
429430
* .. Executable Statements ..
430431
*
@@ -610,9 +611,9 @@ SUBROUTINE CTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
610611
*
611612
A1 = REAL( A( K+I, N-L+I ) )
612613
B1 = REAL( B( I, N-L+I ) )
614+
GAMMA = B1 / A1
613615
*
614-
IF( A1.NE.ZERO ) THEN
615-
GAMMA = B1 / A1
616+
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
616617
*
617618
IF( GAMMA.LT.ZERO ) THEN
618619
CALL CSSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )

lapack-netlib/SRC/dtgsja.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ SUBROUTINE DTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
400400
* .. Parameters ..
401401
INTEGER MAXIT
402402
PARAMETER ( MAXIT = 40 )
403-
DOUBLE PRECISION ZERO, ONE
403+
DOUBLE PRECISION ZERO, ONE, HUGENUM
404404
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
405405
* ..
406406
* .. Local Scalars ..
@@ -419,7 +419,8 @@ SUBROUTINE DTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
419419
$ DSCAL, XERBLA
420420
* ..
421421
* .. Intrinsic Functions ..
422-
INTRINSIC ABS, MAX, MIN
422+
INTRINSIC ABS, MAX, MIN, HUGE
423+
PARAMETER ( HUGENUM = HUGE(ZERO) )
423424
* ..
424425
* .. Executable Statements ..
425426
*
@@ -596,9 +597,9 @@ SUBROUTINE DTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
596597
*
597598
A1 = A( K+I, N-L+I )
598599
B1 = B( I, N-L+I )
600+
GAMMA = B1 / A1
599601
*
600-
IF( A1.NE.ZERO ) THEN
601-
GAMMA = B1 / A1
602+
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
602603
*
603604
* change sign if necessary
604605
*

lapack-netlib/SRC/stgsja.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -400,7 +400,7 @@ SUBROUTINE STGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
400400
* .. Parameters ..
401401
INTEGER MAXIT
402402
PARAMETER ( MAXIT = 40 )
403-
REAL ZERO, ONE
403+
REAL ZERO, ONE, HUGENUM
404404
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
405405
* ..
406406
* .. Local Scalars ..
@@ -419,7 +419,8 @@ SUBROUTINE STGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
419419
$ SSCAL, XERBLA
420420
* ..
421421
* .. Intrinsic Functions ..
422-
INTRINSIC ABS, MAX, MIN
422+
INTRINSIC ABS, MAX, MIN, HUGE
423+
PARAMETER ( HUGENUM = HUGE(ZERO) )
423424
* ..
424425
* .. Executable Statements ..
425426
*
@@ -596,9 +597,9 @@ SUBROUTINE STGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
596597
*
597598
A1 = A( K+I, N-L+I )
598599
B1 = B( I, N-L+I )
600+
GAMMA = B1 / A1
599601
*
600-
IF( A1.NE.ZERO ) THEN
601-
GAMMA = B1 / A1
602+
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
602603
*
603604
* change sign if necessary
604605
*

lapack-netlib/SRC/ztgsja.f

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -401,7 +401,7 @@ SUBROUTINE ZTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
401401
* .. Parameters ..
402402
INTEGER MAXIT
403403
PARAMETER ( MAXIT = 40 )
404-
DOUBLE PRECISION ZERO, ONE
404+
DOUBLE PRECISION ZERO, ONE, HUGENUM
405405
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
406406
COMPLEX*16 CZERO, CONE
407407
PARAMETER ( CZERO = ( 0.0D+0, 0.0D+0 ),
@@ -424,7 +424,8 @@ SUBROUTINE ZTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
424424
$ ZLASET, ZROT
425425
* ..
426426
* .. Intrinsic Functions ..
427-
INTRINSIC ABS, DBLE, DCONJG, MAX, MIN
427+
INTRINSIC ABS, DBLE, DCONJG, MAX, MIN, HUGE
428+
PARAMETER ( HUGENUM = HUGE(ZERO) )
428429
* ..
429430
* .. Executable Statements ..
430431
*
@@ -610,9 +611,9 @@ SUBROUTINE ZTGSJA( JOBU, JOBV, JOBQ, M, P, N, K, L, A, LDA, B,
610611
*
611612
A1 = DBLE( A( K+I, N-L+I ) )
612613
B1 = DBLE( B( I, N-L+I ) )
614+
GAMMA = B1 / A1
613615
*
614-
IF( A1.NE.ZERO ) THEN
615-
GAMMA = B1 / A1
616+
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
616617
*
617618
IF( GAMMA.LT.ZERO ) THEN
618619
CALL ZDSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )

0 commit comments

Comments
 (0)