Skip to content

Commit 2df1e33

Browse files
authored
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.
1 parent c460027 commit 2df1e33

File tree

8 files changed

+8
-8
lines changed

8 files changed

+8
-8
lines changed

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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

lapack-netlib/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)