Break out of potentially infinite rescaling loop after 1000 iterations

Inf values in the input vector will survive rescaling, causing an infinite loop. The value of 1000 is arbitrarily chosen as a large but finite value with the intention to never interfere with regular calculations.
This commit is contained in:
Martin Kroeker 2017-11-10 20:02:21 +01:00 committed by GitHub
parent c460027dbe
commit 2df1e3372d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 8 additions and 8 deletions

View File

@ -175,7 +175,7 @@
BETA = BETA*RSAFMN BETA = BETA*RSAFMN
ALPHI = ALPHI*RSAFMN ALPHI = ALPHI*RSAFMN
ALPHR = ALPHR*RSAFMN ALPHR = ALPHR*RSAFMN
IF( ABS( BETA ).LT.SAFMIN ) IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SAFMIN * New BETA is at most 1, at least SAFMIN

View File

@ -197,7 +197,7 @@
BETA = BETA*BIGNUM BETA = BETA*BIGNUM
ALPHI = ALPHI*BIGNUM ALPHI = ALPHI*BIGNUM
ALPHR = ALPHR*BIGNUM ALPHR = ALPHR*BIGNUM
IF( ABS( BETA ).LT.SMLNUM ) IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SMLNUM * New BETA is at most 1, at least SMLNUM

View File

@ -170,7 +170,7 @@
CALL DSCAL( N-1, RSAFMN, X, INCX ) CALL DSCAL( N-1, RSAFMN, X, INCX )
BETA = BETA*RSAFMN BETA = BETA*RSAFMN
ALPHA = ALPHA*RSAFMN ALPHA = ALPHA*RSAFMN
IF( ABS( BETA ).LT.SAFMIN ) IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000 )
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SAFMIN * New BETA is at most 1, at least SAFMIN

View File

@ -181,7 +181,7 @@
CALL DSCAL( N-1, BIGNUM, X, INCX ) CALL DSCAL( N-1, BIGNUM, X, INCX )
BETA = BETA*BIGNUM BETA = BETA*BIGNUM
ALPHA = ALPHA*BIGNUM ALPHA = ALPHA*BIGNUM
IF( ABS( BETA ).LT.SMLNUM ) IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SMLNUM * New BETA is at most 1, at least SMLNUM

View File

@ -170,7 +170,7 @@
CALL SSCAL( N-1, RSAFMN, X, INCX ) CALL SSCAL( N-1, RSAFMN, X, INCX )
BETA = BETA*RSAFMN BETA = BETA*RSAFMN
ALPHA = ALPHA*RSAFMN ALPHA = ALPHA*RSAFMN
IF( ABS( BETA ).LT.SAFMIN ) IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SAFMIN * New BETA is at most 1, at least SAFMIN

View File

@ -181,7 +181,7 @@
CALL SSCAL( N-1, BIGNUM, X, INCX ) CALL SSCAL( N-1, BIGNUM, X, INCX )
BETA = BETA*BIGNUM BETA = BETA*BIGNUM
ALPHA = ALPHA*BIGNUM ALPHA = ALPHA*BIGNUM
IF( ABS( BETA ).LT.SMLNUM ) IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SMLNUM * New BETA is at most 1, at least SMLNUM

View File

@ -175,7 +175,7 @@
BETA = BETA*RSAFMN BETA = BETA*RSAFMN
ALPHI = ALPHI*RSAFMN ALPHI = ALPHI*RSAFMN
ALPHR = ALPHR*RSAFMN ALPHR = ALPHR*RSAFMN
IF( ABS( BETA ).LT.SAFMIN ) IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SAFMIN * New BETA is at most 1, at least SAFMIN

View File

@ -197,7 +197,7 @@
BETA = BETA*BIGNUM BETA = BETA*BIGNUM
ALPHI = ALPHI*BIGNUM ALPHI = ALPHI*BIGNUM
ALPHR = ALPHR*BIGNUM ALPHR = ALPHR*BIGNUM
IF( ABS( BETA ).LT.SMLNUM ) IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
$ GO TO 10 $ GO TO 10
* *
* New BETA is at most 1, at least SMLNUM * New BETA is at most 1, at least SMLNUM