Skip to content

Commit cea9568

Browse files
Fix bug: ROUNDUP_LWORK must use (1+EPSILON(0)) instead of (1+DLAMCH(EPS))
Test results: SROUNDUP_LWORK(0) = 0.00000000 SROUNDUP_LWORK(1) = 1.00000000 SROUNDUP_LWORK(317) = 317.000000 DROUNDUP_LWORK(0) = 0.0000000000000000 DROUNDUP_LWORK(1) = 1.0000000000000000 DROUNDUP_LWORK(317) = 317.00000000000000 Tests with X = 16777216 = 2**24 X-2 = 16777214; SROUNDUP_LWORK(X-2) = 16777214.0 X-1 = 16777215; SROUNDUP_LWORK(X-1) = 16777215.0 X = 16777216; SROUNDUP_LWORK(X ) = 16777218.0 X+1 = 16777217; SROUNDUP_LWORK(X+1) = 16777218.0 X+2 = 16777218; SROUNDUP_LWORK(X+2) = 16777220.0 Tests with X = 9007199254740992 = 2**53 X-2 = 9007199254740990; SROUNDUP_LWORK(X-2) = 9007200328482816.0 X-1 = 9007199254740991; SROUNDUP_LWORK(X-1) = 9007200328482816.0 X = 9007199254740992; SROUNDUP_LWORK(X ) = 9007200328482816.0 X+1 = 9007199254740993; SROUNDUP_LWORK(X+1) = 9007200328482816.0 X+2 = 9007199254740994; SROUNDUP_LWORK(X+2) = 9007200328482816.0 Tests with X = 9007199254740992 = 2**53 X-2 = 9007199254740990; DROUNDUP_LWORK(X-2) = 9007199254740990.0 X-1 = 9007199254740991; DROUNDUP_LWORK(X-1) = 9007199254740991.0 X = 9007199254740992; DROUNDUP_LWORK(X ) = 9007199254740994.0 X+1 = 9007199254740993; DROUNDUP_LWORK(X+1) = 9007199254740994.0 X+2 = 9007199254740994; DROUNDUP_LWORK(X+2) = 9007199254740996.0
1 parent f12515a commit cea9568

File tree

2 files changed

+4
-12
lines changed

2 files changed

+4
-12
lines changed

INSTALL/droundup_lwork.f

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -63,20 +63,16 @@ DOUBLE PRECISION FUNCTION DROUNDUP_LWORK( LWORK )
6363
*
6464
* =====================================================================
6565
* ..
66-
* .. External Functions ..
67-
DOUBLE PRECISION DLAMCH
68-
EXTERNAL DLAMCH
69-
* ..
7066
* .. Intrinsic Functions ..
71-
INTRINSIC DIGITS, RADIX
67+
INTRINSIC DIGITS, RADIX, EPSILON
7268
* ..
7369
* .. Executable Statements ..
7470
* ..
7571
DROUNDUP_LWORK = LWORK
7672
*
7773
IF( DROUNDUP_LWORK .GE. DBLE(RADIX(0.0D+0))**DIGITS(0.0D+0) ) THEN
7874
* If LWORK can't be represented exactly in double precision
79-
DROUNDUP_LWORK = LWORK * ( 1.0D+0 + DLAMCH('EPS') )
75+
DROUNDUP_LWORK = DROUNDUP_LWORK * ( 1.0D+0 + EPSILON(0.0D+0) )
8076
ENDIF
8177
*
8278
RETURN

INSTALL/sroundup_lwork.f

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -66,20 +66,16 @@ REAL FUNCTION SROUNDUP_LWORK( LWORK )
6666
*
6767
* =====================================================================
6868
* ..
69-
* .. External Functions ..
70-
REAL SLAMCH
71-
EXTERNAL SLAMCH
72-
* ..
7369
* .. Intrinsic Functions ..
74-
INTRINSIC DIGITS, RADIX
70+
INTRINSIC DIGITS, RADIX, EPSILON
7571
* ..
7672
* .. Executable Statements ..
7773
* ..
7874
SROUNDUP_LWORK = LWORK
7975
*
8076
IF( SROUNDUP_LWORK .GE. REAL(RADIX(0.0E+0))**DIGITS(0.0E+0) ) THEN
8177
* If LWORK can't be represented exactly in single precision
82-
SROUNDUP_LWORK = LWORK * ( 1.0E+0 + SLAMCH('EPS') )
78+
SROUNDUP_LWORK = SROUNDUP_LWORK * ( 1.0E+0 + EPSILON(0.0E+0) )
8379
ENDIF
8480
*
8581
RETURN

0 commit comments

Comments
 (0)