1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
|
DOUBLE PRECISION FUNCTION exparg(l)
C--------------------------------------------------------------------
C IF L = 0 THEN EXPARG(L) = THE LARGEST POSITIVE W FOR WHICH
C EXP(W) CAN BE COMPUTED.
C
C IF L IS NONZERO THEN EXPARG(L) = THE LARGEST NEGATIVE W FOR
C WHICH THE COMPUTED VALUE OF EXP(W) IS NONZERO.
C
C NOTE... ONLY AN APPROXIMATE VALUE FOR EXPARG(L) IS NEEDED.
C--------------------------------------------------------------------
C .. Scalar Arguments ..
INTEGER l
C ..
C .. Local Scalars ..
DOUBLE PRECISION lnb
INTEGER b,m
C ..
C .. External Functions ..
INTEGER ipmpar
EXTERNAL ipmpar
C ..
C .. Intrinsic Functions ..
INTRINSIC dble,dlog
C ..
C .. Executable Statements ..
C
b = ipmpar(4)
IF (b.NE.2) GO TO 10
lnb = .69314718055995D0
GO TO 40
10 IF (b.NE.8) GO TO 20
lnb = 2.0794415416798D0
GO TO 40
20 IF (b.NE.16) GO TO 30
lnb = 2.7725887222398D0
GO TO 40
30 lnb = dlog(dble(b))
C
40 IF (l.EQ.0) GO TO 50
m = ipmpar(9) - 1
exparg = 0.99999D0* (m*lnb)
RETURN
50 m = ipmpar(10)
exparg = 0.99999D0* (m*lnb)
RETURN
END
|