1: DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
2: *
3: * -- LAPACK auxiliary routine (version 3.3.0) --
4: * -- LAPACK is a software package provided by Univ. of Tennessee, --
5: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
6: * Based on LAPACK DLAMCH but with Fortran 95 query functions
7: * See: http://www.cs.utk.edu/~luszczek/lapack/lamch.html
8: * and http://www.netlib.org/lapack-dev/lapack-coding/program-style.html#id2537289
9: * July 2010
10: *
11: * .. Scalar Arguments ..
12: CHARACTER CMACH
13: * ..
14: *
15: * Purpose
16: * =======
17: *
18: * DLAMCH determines double precision machine parameters.
19: *
20: * Arguments
21: * =========
22: *
23: * CMACH (input) CHARACTER*1
24: * Specifies the value to be returned by DLAMCH:
25: * = 'E' or 'e', DLAMCH := eps
26: * = 'S' or 's , DLAMCH := sfmin
27: * = 'B' or 'b', DLAMCH := base
28: * = 'P' or 'p', DLAMCH := eps*base
29: * = 'N' or 'n', DLAMCH := t
30: * = 'R' or 'r', DLAMCH := rnd
31: * = 'M' or 'm', DLAMCH := emin
32: * = 'U' or 'u', DLAMCH := rmin
33: * = 'L' or 'l', DLAMCH := emax
34: * = 'O' or 'o', DLAMCH := rmax
35: *
36: * where
37: *
38: * eps = relative machine precision
39: * sfmin = safe minimum, such that 1/sfmin does not overflow
40: * base = base of the machine
41: * prec = eps*base
42: * t = number of (base) digits in the mantissa
43: * rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
44: * emin = minimum exponent before (gradual) underflow
45: * rmin = underflow threshold - base**(emin-1)
46: * emax = largest exponent before overflow
47: * rmax = overflow threshold - (base**emax)*(1-eps)
48: *
49: * =====================================================================
50: *
51: * .. Parameters ..
52: DOUBLE PRECISION ONE, ZERO
53: PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 )
54: * ..
55: * .. Local Scalars ..
56: DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH
57: * ..
58: * .. External Functions ..
59: LOGICAL LSAME
60: EXTERNAL LSAME
61: * ..
62: * .. Intrinsic Functions ..
63: INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT,
64: $ MINEXPONENT, RADIX, TINY
65: * ..
66: * .. Executable Statements ..
67: *
68: *
69: * Assume rounding, not chopping. Always.
70: *
71: RND = ONE
72: *
73: IF( ONE.EQ.RND ) THEN
74: EPS = EPSILON(ZERO) * 0.5
75: ELSE
76: EPS = EPSILON(ZERO)
77: END IF
78: *
79: IF( LSAME( CMACH, 'E' ) ) THEN
80: RMACH = EPS
81: ELSE IF( LSAME( CMACH, 'S' ) ) THEN
82: SFMIN = TINY(ZERO)
83: SMALL = ONE / HUGE(ZERO)
84: IF( SMALL.GE.SFMIN ) THEN
85: *
86: * Use SMALL plus a bit, to avoid the possibility of rounding
87: * causing overflow when computing 1/sfmin.
88: *
89: SFMIN = SMALL*( ONE+EPS )
90: END IF
91: RMACH = SFMIN
92: ELSE IF( LSAME( CMACH, 'B' ) ) THEN
93: RMACH = RADIX(ZERO)
94: ELSE IF( LSAME( CMACH, 'P' ) ) THEN
95: RMACH = EPS * RADIX(ZERO)
96: ELSE IF( LSAME( CMACH, 'N' ) ) THEN
97: RMACH = DIGITS(ZERO)
98: ELSE IF( LSAME( CMACH, 'R' ) ) THEN
99: RMACH = RND
100: ELSE IF( LSAME( CMACH, 'M' ) ) THEN
101: RMACH = MINEXPONENT(ZERO)
102: ELSE IF( LSAME( CMACH, 'U' ) ) THEN
103: RMACH = tiny(zero)
104: ELSE IF( LSAME( CMACH, 'L' ) ) THEN
105: RMACH = MAXEXPONENT(ZERO)
106: ELSE IF( LSAME( CMACH, 'O' ) ) THEN
107: RMACH = HUGE(ZERO)
108: ELSE
109: RMACH = ZERO
110: END IF
111: *
112: DLAMCH = RMACH
113: RETURN
114: *
115: * End of DLAMCH
116: *
117: END
118: ************************************************************************
119: *
120: DOUBLE PRECISION FUNCTION DLAMC3( A, B )
121: *
122: * -- LAPACK auxiliary routine (version 3.3.0) --
123: * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
124: * November 2010
125: *
126: * .. Scalar Arguments ..
127: DOUBLE PRECISION A, B
128: * ..
129: *
130: * Purpose
131: * =======
132: *
133: * DLAMC3 is intended to force A and B to be stored prior to doing
134: * the addition of A and B , for use in situations where optimizers
135: * might hold one of these in a register.
136: *
137: * Arguments
138: * =========
139: *
140: * A (input) DOUBLE PRECISION
141: * B (input) DOUBLE PRECISION
142: * The values A and B.
143: *
144: * =====================================================================
145: *
146: * .. Executable Statements ..
147: *
148: DLAMC3 = A + B
149: *
150: RETURN
151: *
152: * End of DLAMC3
153: *
154: END
155: *
156: ************************************************************************
CVSweb interface <joel.bertrand@systella.fr>