Skip to content

Commit 7324758

Browse files
authored
Merge pull request #607 from angsch/lapy
Make lapy and nrm2 consistent
2 parents 3b26987 + 906adae commit 7324758

File tree

4 files changed

+24
-11
lines changed

4 files changed

+24
-11
lines changed

SRC/dlapy2.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,16 @@ DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
7878
PARAMETER ( ONE = 1.0D0 )
7979
* ..
8080
* .. Local Scalars ..
81-
DOUBLE PRECISION W, XABS, YABS, Z
81+
DOUBLE PRECISION W, XABS, YABS, Z, HUGEVAL
8282
LOGICAL X_IS_NAN, Y_IS_NAN
8383
* ..
8484
* .. External Functions ..
8585
LOGICAL DISNAN
8686
EXTERNAL DISNAN
8787
* ..
88+
* .. External Subroutines ..
89+
DOUBLE PRECISION DLAMCH
90+
* ..
8891
* .. Intrinsic Functions ..
8992
INTRINSIC ABS, MAX, MIN, SQRT
9093
* ..
@@ -94,13 +97,14 @@ DOUBLE PRECISION FUNCTION DLAPY2( X, Y )
9497
Y_IS_NAN = DISNAN( Y )
9598
IF ( X_IS_NAN ) DLAPY2 = X
9699
IF ( Y_IS_NAN ) DLAPY2 = Y
100+
HUGEVAL = DLAMCH( 'Overflow' )
97101
*
98102
IF ( .NOT.( X_IS_NAN.OR.Y_IS_NAN ) ) THEN
99103
XABS = ABS( X )
100104
YABS = ABS( Y )
101105
W = MAX( XABS, YABS )
102106
Z = MIN( XABS, YABS )
103-
IF( Z.EQ.ZERO ) THEN
107+
IF( Z.EQ.ZERO .OR. W.GT.HUGEVAL ) THEN
104108
DLAPY2 = W
105109
ELSE
106110
DLAPY2 = W*SQRT( ONE+( Z / W )**2 )

SRC/dlapy3.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,22 @@ DOUBLE PRECISION FUNCTION DLAPY3( X, Y, Z )
8181
PARAMETER ( ZERO = 0.0D0 )
8282
* ..
8383
* .. Local Scalars ..
84-
DOUBLE PRECISION W, XABS, YABS, ZABS
84+
DOUBLE PRECISION W, XABS, YABS, ZABS, HUGEVAL
85+
* ..
86+
* .. External Subroutines ..
87+
DOUBLE PRECISION DLAMCH
8588
* ..
8689
* .. Intrinsic Functions ..
8790
INTRINSIC ABS, MAX, SQRT
8891
* ..
8992
* .. Executable Statements ..
9093
*
94+
HUGEVAL = DLAMCH( 'Overflow' )
9195
XABS = ABS( X )
9296
YABS = ABS( Y )
9397
ZABS = ABS( Z )
9498
W = MAX( XABS, YABS, ZABS )
95-
IF( W.EQ.ZERO ) THEN
99+
IF( W.EQ.ZERO .OR. W.GT.HUGEVAL ) THEN
96100
* W can be zero for max(0,nan,0)
97101
* adding all three entries together will make sure
98102
* NaN will not disappear.

SRC/slapy2.f

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,32 +78,33 @@ REAL FUNCTION SLAPY2( X, Y )
7878
PARAMETER ( ONE = 1.0E0 )
7979
* ..
8080
* .. Local Scalars ..
81-
REAL W, XABS, YABS, Z
81+
REAL W, XABS, YABS, Z, HUGEVAL
8282
LOGICAL X_IS_NAN, Y_IS_NAN
8383
* ..
8484
* .. External Functions ..
8585
LOGICAL SISNAN
8686
EXTERNAL SISNAN
8787
* ..
88+
* .. External Subroutines ..
89+
REAL SLAMCH
90+
* ..
8891
* .. Intrinsic Functions ..
8992
INTRINSIC ABS, MAX, MIN, SQRT
9093
* ..
9194
* .. Executable Statements ..
92-
*
93-
* ..
94-
* .. Executable Statements ..
9595
*
9696
X_IS_NAN = SISNAN( X )
9797
Y_IS_NAN = SISNAN( Y )
9898
IF ( X_IS_NAN ) SLAPY2 = X
9999
IF ( Y_IS_NAN ) SLAPY2 = Y
100+
HUGEVAL = SLAMCH( 'Overflow' )
100101
*
101102
IF ( .NOT.( X_IS_NAN.OR.Y_IS_NAN ) ) THEN
102103
XABS = ABS( X )
103104
YABS = ABS( Y )
104105
W = MAX( XABS, YABS )
105106
Z = MIN( XABS, YABS )
106-
IF( Z.EQ.ZERO ) THEN
107+
IF( Z.EQ.ZERO .OR. W.GT.HUGEVAL ) THEN
107108
SLAPY2 = W
108109
ELSE
109110
SLAPY2 = W*SQRT( ONE+( Z / W )**2 )

SRC/slapy3.f

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -81,18 +81,22 @@ REAL FUNCTION SLAPY3( X, Y, Z )
8181
PARAMETER ( ZERO = 0.0E0 )
8282
* ..
8383
* .. Local Scalars ..
84-
REAL W, XABS, YABS, ZABS
84+
REAL W, XABS, YABS, ZABS, HUGEVAL
85+
* ..
86+
* .. External Subroutines ..
87+
REAL SLAMCH
8588
* ..
8689
* .. Intrinsic Functions ..
8790
INTRINSIC ABS, MAX, SQRT
8891
* ..
8992
* .. Executable Statements ..
9093
*
94+
HUGEVAL = SLAMCH( 'Overflow' )
9195
XABS = ABS( X )
9296
YABS = ABS( Y )
9397
ZABS = ABS( Z )
9498
W = MAX( XABS, YABS, ZABS )
95-
IF( W.EQ.ZERO ) THEN
99+
IF( W.EQ.ZERO .OR. W.GT.HUGEVAL ) THEN
96100
* W can be zero for max(0,nan,0)
97101
* adding all three entries together will make sure
98102
* NaN will not disappear.

0 commit comments

Comments
 (0)