Skip to content

Commit 49d10ea

Browse files
authored
Break out of potentially infinite rescaling loop after 1000 iterations
inf values in the input vector will survive rescaling, making the code hang. The limit of 1000 iterations is arbitrarily chosen with the intention to not interfere with regular behaviour.
1 parent 6bcfa0d commit 49d10ea

8 files changed

Lines changed: 8 additions & 8 deletions

File tree

SRC/clarfg.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ SUBROUTINE CLARFG( N, ALPHA, X, INCX, TAU )
175175
BETA = BETA*RSAFMN
176176
ALPHI = ALPHI*RSAFMN
177177
ALPHR = ALPHR*RSAFMN
178-
IF( ABS( BETA ).LT.SAFMIN )
178+
IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
179179
$ GO TO 10
180180
*
181181
* New BETA is at most 1, at least SAFMIN

SRC/clarfgp.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ SUBROUTINE CLARFGP( N, ALPHA, X, INCX, TAU )
197197
BETA = BETA*BIGNUM
198198
ALPHI = ALPHI*BIGNUM
199199
ALPHR = ALPHR*BIGNUM
200-
IF( ABS( BETA ).LT.SMLNUM )
200+
IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
201201
$ GO TO 10
202202
*
203203
* New BETA is at most 1, at least SMLNUM

SRC/dlarfg.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ SUBROUTINE DLARFG( N, ALPHA, X, INCX, TAU )
170170
CALL DSCAL( N-1, RSAFMN, X, INCX )
171171
BETA = BETA*RSAFMN
172172
ALPHA = ALPHA*RSAFMN
173-
IF( ABS( BETA ).LT.SAFMIN )
173+
IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000 )
174174
$ GO TO 10
175175
*
176176
* New BETA is at most 1, at least SAFMIN

SRC/dlarfgp.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ SUBROUTINE DLARFGP( N, ALPHA, X, INCX, TAU )
181181
CALL DSCAL( N-1, BIGNUM, X, INCX )
182182
BETA = BETA*BIGNUM
183183
ALPHA = ALPHA*BIGNUM
184-
IF( ABS( BETA ).LT.SMLNUM )
184+
IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
185185
$ GO TO 10
186186
*
187187
* New BETA is at most 1, at least SMLNUM

SRC/slarfg.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ SUBROUTINE SLARFG( N, ALPHA, X, INCX, TAU )
170170
CALL SSCAL( N-1, RSAFMN, X, INCX )
171171
BETA = BETA*RSAFMN
172172
ALPHA = ALPHA*RSAFMN
173-
IF( ABS( BETA ).LT.SAFMIN )
173+
IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
174174
$ GO TO 10
175175
*
176176
* New BETA is at most 1, at least SAFMIN

SRC/slarfgp.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ SUBROUTINE SLARFGP( N, ALPHA, X, INCX, TAU )
181181
CALL SSCAL( N-1, BIGNUM, X, INCX )
182182
BETA = BETA*BIGNUM
183183
ALPHA = ALPHA*BIGNUM
184-
IF( ABS( BETA ).LT.SMLNUM )
184+
IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000 )
185185
$ GO TO 10
186186
*
187187
* New BETA is at most 1, at least SMLNUM

SRC/zlarfg.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ SUBROUTINE ZLARFG( N, ALPHA, X, INCX, TAU )
175175
BETA = BETA*RSAFMN
176176
ALPHI = ALPHI*RSAFMN
177177
ALPHR = ALPHR*RSAFMN
178-
IF( ABS( BETA ).LT.SAFMIN )
178+
IF( ABS( BETA ).LT.SAFMIN .AND. KNT .LT. 1000)
179179
$ GO TO 10
180180
*
181181
* New BETA is at most 1, at least SAFMIN

SRC/zlarfgp.f

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ SUBROUTINE ZLARFGP( N, ALPHA, X, INCX, TAU )
197197
BETA = BETA*BIGNUM
198198
ALPHI = ALPHI*BIGNUM
199199
ALPHR = ALPHR*BIGNUM
200-
IF( ABS( BETA ).LT.SMLNUM )
200+
IF( ABS( BETA ).LT.SMLNUM .AND. KNT .LT. 1000)
201201
$ GO TO 10
202202
*
203203
* New BETA is at most 1, at least SMLNUM

0 commit comments

Comments
 (0)