Fix possible division by zero in xTGSJA (Reference-LAPACK PR502)
This commit is contained in:
parent
3a30c12019
commit
de8656769c
|
@ -401,7 +401,7 @@
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
INTEGER MAXIT
|
INTEGER MAXIT
|
||||||
PARAMETER ( MAXIT = 40 )
|
PARAMETER ( MAXIT = 40 )
|
||||||
REAL ZERO, ONE
|
REAL ZERO, ONE, HUGENUM
|
||||||
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
|
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
|
||||||
COMPLEX CZERO, CONE
|
COMPLEX CZERO, CONE
|
||||||
PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ),
|
PARAMETER ( CZERO = ( 0.0E+0, 0.0E+0 ),
|
||||||
|
@ -424,7 +424,8 @@
|
||||||
$ SLARTG, XERBLA
|
$ SLARTG, XERBLA
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS, CONJG, MAX, MIN, REAL
|
INTRINSIC ABS, CONJG, MAX, MIN, REAL, HUGE
|
||||||
|
PARAMETER ( HUGENUM = HUGE(ZERO) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
|
@ -610,9 +611,9 @@
|
||||||
*
|
*
|
||||||
A1 = REAL( A( K+I, N-L+I ) )
|
A1 = REAL( A( K+I, N-L+I ) )
|
||||||
B1 = REAL( B( I, N-L+I ) )
|
B1 = REAL( B( I, N-L+I ) )
|
||||||
|
GAMMA = B1 / A1
|
||||||
*
|
*
|
||||||
IF( A1.NE.ZERO ) THEN
|
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
|
||||||
GAMMA = B1 / A1
|
|
||||||
*
|
*
|
||||||
IF( GAMMA.LT.ZERO ) THEN
|
IF( GAMMA.LT.ZERO ) THEN
|
||||||
CALL CSSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )
|
CALL CSSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )
|
||||||
|
|
|
@ -400,7 +400,7 @@
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
INTEGER MAXIT
|
INTEGER MAXIT
|
||||||
PARAMETER ( MAXIT = 40 )
|
PARAMETER ( MAXIT = 40 )
|
||||||
DOUBLE PRECISION ZERO, ONE
|
DOUBLE PRECISION ZERO, ONE, HUGENUM
|
||||||
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
|
@ -419,7 +419,8 @@
|
||||||
$ DSCAL, XERBLA
|
$ DSCAL, XERBLA
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS, MAX, MIN
|
INTRINSIC ABS, MAX, MIN, HUGE
|
||||||
|
PARAMETER ( HUGENUM = HUGE(ZERO) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
|
@ -596,9 +597,9 @@
|
||||||
*
|
*
|
||||||
A1 = A( K+I, N-L+I )
|
A1 = A( K+I, N-L+I )
|
||||||
B1 = B( I, N-L+I )
|
B1 = B( I, N-L+I )
|
||||||
|
GAMMA = B1 / A1
|
||||||
*
|
*
|
||||||
IF( A1.NE.ZERO ) THEN
|
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
|
||||||
GAMMA = B1 / A1
|
|
||||||
*
|
*
|
||||||
* change sign if necessary
|
* change sign if necessary
|
||||||
*
|
*
|
||||||
|
|
|
@ -400,7 +400,7 @@
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
INTEGER MAXIT
|
INTEGER MAXIT
|
||||||
PARAMETER ( MAXIT = 40 )
|
PARAMETER ( MAXIT = 40 )
|
||||||
REAL ZERO, ONE
|
REAL ZERO, ONE, HUGENUM
|
||||||
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
|
PARAMETER ( ZERO = 0.0E+0, ONE = 1.0E+0 )
|
||||||
* ..
|
* ..
|
||||||
* .. Local Scalars ..
|
* .. Local Scalars ..
|
||||||
|
@ -419,7 +419,8 @@
|
||||||
$ SSCAL, XERBLA
|
$ SSCAL, XERBLA
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS, MAX, MIN
|
INTRINSIC ABS, MAX, MIN, HUGE
|
||||||
|
PARAMETER ( HUGENUM = HUGE(ZERO) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
|
@ -596,9 +597,9 @@
|
||||||
*
|
*
|
||||||
A1 = A( K+I, N-L+I )
|
A1 = A( K+I, N-L+I )
|
||||||
B1 = B( I, N-L+I )
|
B1 = B( I, N-L+I )
|
||||||
|
GAMMA = B1 / A1
|
||||||
*
|
*
|
||||||
IF( A1.NE.ZERO ) THEN
|
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
|
||||||
GAMMA = B1 / A1
|
|
||||||
*
|
*
|
||||||
* change sign if necessary
|
* change sign if necessary
|
||||||
*
|
*
|
||||||
|
|
|
@ -401,7 +401,7 @@
|
||||||
* .. Parameters ..
|
* .. Parameters ..
|
||||||
INTEGER MAXIT
|
INTEGER MAXIT
|
||||||
PARAMETER ( MAXIT = 40 )
|
PARAMETER ( MAXIT = 40 )
|
||||||
DOUBLE PRECISION ZERO, ONE
|
DOUBLE PRECISION ZERO, ONE, HUGENUM
|
||||||
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
PARAMETER ( ZERO = 0.0D+0, ONE = 1.0D+0 )
|
||||||
COMPLEX*16 CZERO, CONE
|
COMPLEX*16 CZERO, CONE
|
||||||
PARAMETER ( CZERO = ( 0.0D+0, 0.0D+0 ),
|
PARAMETER ( CZERO = ( 0.0D+0, 0.0D+0 ),
|
||||||
|
@ -424,7 +424,8 @@
|
||||||
$ ZLASET, ZROT
|
$ ZLASET, ZROT
|
||||||
* ..
|
* ..
|
||||||
* .. Intrinsic Functions ..
|
* .. Intrinsic Functions ..
|
||||||
INTRINSIC ABS, DBLE, DCONJG, MAX, MIN
|
INTRINSIC ABS, DBLE, DCONJG, MAX, MIN, HUGE
|
||||||
|
PARAMETER ( HUGENUM = HUGE(ZERO) )
|
||||||
* ..
|
* ..
|
||||||
* .. Executable Statements ..
|
* .. Executable Statements ..
|
||||||
*
|
*
|
||||||
|
@ -610,9 +611,9 @@
|
||||||
*
|
*
|
||||||
A1 = DBLE( A( K+I, N-L+I ) )
|
A1 = DBLE( A( K+I, N-L+I ) )
|
||||||
B1 = DBLE( B( I, N-L+I ) )
|
B1 = DBLE( B( I, N-L+I ) )
|
||||||
|
GAMMA = B1 / A1
|
||||||
*
|
*
|
||||||
IF( A1.NE.ZERO ) THEN
|
IF( (GAMMA.LE.HUGENUM).AND.(GAMMA.GE.-HUGENUM) ) THEN
|
||||||
GAMMA = B1 / A1
|
|
||||||
*
|
*
|
||||||
IF( GAMMA.LT.ZERO ) THEN
|
IF( GAMMA.LT.ZERO ) THEN
|
||||||
CALL ZDSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )
|
CALL ZDSCAL( L-I+1, -ONE, B( I, N-L+I ), LDB )
|
||||||
|
|
Loading…
Reference in New Issue