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.
BETA = BETA*RSAFMN
ALPHI = ALPHI*RSAFMN
ALPHR = ALPHR*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
+ IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10
*
* New BETA is at most 1, at least SAFMIN
BETA = BETA*BIGNUM
ALPHI = ALPHI*BIGNUM
ALPHR = ALPHR*BIGNUM
- IF( ABS( BETA ).LT.SMLNUM )
+ IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
$ GO TO 10
*
* New BETA is at most 1, at least SMLNUM
CALL DSCAL( N-1, RSAFMN, X, INCX )
BETA = BETA*RSAFMN
ALPHA = ALPHA*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
+ IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000 )
$ GO TO 10
*
* New BETA is at most 1, at least SAFMIN
CALL DSCAL( N-1, BIGNUM, X, INCX )
BETA = BETA*BIGNUM
ALPHA = ALPHA*BIGNUM
- IF( ABS( BETA ).LT.SMLNUM )
+ IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
$ GO TO 10
*
* New BETA is at most 1, at least SMLNUM
CALL SSCAL( N-1, RSAFMN, X, INCX )
BETA = BETA*RSAFMN
ALPHA = ALPHA*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
+ IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10
*
* New BETA is at most 1, at least SAFMIN
CALL SSCAL( N-1, BIGNUM, X, INCX )
BETA = BETA*BIGNUM
ALPHA = ALPHA*BIGNUM
- IF( ABS( BETA ).LT.SMLNUM )
+ IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
$ GO TO 10
*
* New BETA is at most 1, at least SMLNUM
BETA = BETA*RSAFMN
ALPHI = ALPHI*RSAFMN
ALPHR = ALPHR*RSAFMN
- IF( ABS( BETA ).LT.SAFMIN )
+ IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
$ GO TO 10
*
* New BETA is at most 1, at least SAFMIN
BETA = BETA*BIGNUM
ALPHI = ALPHI*BIGNUM
ALPHR = ALPHR*BIGNUM
- IF( ABS( BETA ).LT.SMLNUM )
+ IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
$ GO TO 10
*
* New BETA is at most 1, at least SMLNUM