1: *> \brief \b SLAMCH
2: *
3: * =========== DOCUMENTATION ===========
4: *
5: * Online html documentation available at
6: * http://www.netlib.org/lapack/explore-html/
7: *
8: * Definition:
9: * ===========
10: *
11: * REAL FUNCTION SLAMCH( CMACH )
12: *
13: * .. Scalar Arguments ..
14: * CHARACTER CMACH
15: * ..
16: *
17: *
18: *> \par Purpose:
19: * =============
20: *>
21: *> \verbatim
22: *>
23: *> SLAMCH determines single precision machine parameters.
24: *> \endverbatim
25: *
26: * Arguments:
27: * ==========
28: *
29: *> \param[in] CMACH
30: *> \verbatim
31: *> Specifies the value to be returned by SLAMCH:
32: *> = 'E' or 'e', SLAMCH := eps
33: *> = 'S' or 's , SLAMCH := sfmin
34: *> = 'B' or 'b', SLAMCH := base
35: *> = 'P' or 'p', SLAMCH := eps*base
36: *> = 'N' or 'n', SLAMCH := t
37: *> = 'R' or 'r', SLAMCH := rnd
38: *> = 'M' or 'm', SLAMCH := emin
39: *> = 'U' or 'u', SLAMCH := rmin
40: *> = 'L' or 'l', SLAMCH := emax
41: *> = 'O' or 'o', SLAMCH := rmax
42: *> where
43: *> eps = relative machine precision
44: *> sfmin = safe minimum, such that 1/sfmin does not overflow
45: *> base = base of the machine
46: *> prec = eps*base
47: *> t = number of (base) digits in the mantissa
48: *> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise
49: *> emin = minimum exponent before (gradual) underflow
50: *> rmin = underflow threshold - base**(emin-1)
51: *> emax = largest exponent before overflow
52: *> rmax = overflow threshold - (base**emax)*(1-eps)
53: *> \endverbatim
54: *
55: * Authors:
56: * ========
57: *
58: *> \author Univ. of Tennessee
59: *> \author Univ. of California Berkeley
60: *> \author Univ. of Colorado Denver
61: *> \author NAG Ltd.
62: *
63: *> \date November 2011
64: *
65: *> \ingroup auxOTHERauxiliary
66: *
67: * =====================================================================
68: REAL FUNCTION SLAMCH( CMACH )
69: *
70: * -- LAPACK auxiliary routine (version 3.4.0) --
71: * -- LAPACK is a software package provided by Univ. of Tennessee, --
72: * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
73: * November 2011
74: *
75: * .. Scalar Arguments ..
76: CHARACTER CMACH
77: * ..
78: *
79: * =====================================================================
80: *
81: * .. Parameters ..
82: REAL ONE, ZERO
83: PARAMETER ( ONE = 1.0E+0, ZERO = 0.0E+0 )
84: * ..
85: * .. Local Scalars ..
86: REAL RND, EPS, SFMIN, SMALL, RMACH
87: * ..
88: * .. External Functions ..
89: LOGICAL LSAME
90: EXTERNAL LSAME
91: * ..
92: * .. Intrinsic Functions ..
93: INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT,
94: $ MINEXPONENT, RADIX, TINY
95: * ..
96: * .. Executable Statements ..
97: *
98: *
99: * Assume rounding, not chopping. Always.
100: *
101: RND = ONE
102: *
103: IF( ONE.EQ.RND ) THEN
104: EPS = EPSILON(ZERO) * 0.5
105: ELSE
106: EPS = EPSILON(ZERO)
107: END IF
108: *
109: IF( LSAME( CMACH, 'E' ) ) THEN
110: RMACH = EPS
111: ELSE IF( LSAME( CMACH, 'S' ) ) THEN
112: SFMIN = TINY(ZERO)
113: SMALL = ONE / HUGE(ZERO)
114: IF( SMALL.GE.SFMIN ) THEN
115: *
116: * Use SMALL plus a bit, to avoid the possibility of rounding
117: * causing overflow when computing 1/sfmin.
118: *
119: SFMIN = SMALL*( ONE+EPS )
120: END IF
121: RMACH = SFMIN
122: ELSE IF( LSAME( CMACH, 'B' ) ) THEN
123: RMACH = RADIX(ZERO)
124: ELSE IF( LSAME( CMACH, 'P' ) ) THEN
125: RMACH = EPS * RADIX(ZERO)
126: ELSE IF( LSAME( CMACH, 'N' ) ) THEN
127: RMACH = DIGITS(ZERO)
128: ELSE IF( LSAME( CMACH, 'R' ) ) THEN
129: RMACH = RND
130: ELSE IF( LSAME( CMACH, 'M' ) ) THEN
131: RMACH = MINEXPONENT(ZERO)
132: ELSE IF( LSAME( CMACH, 'U' ) ) THEN
133: RMACH = tiny(zero)
134: ELSE IF( LSAME( CMACH, 'L' ) ) THEN
135: RMACH = MAXEXPONENT(ZERO)
136: ELSE IF( LSAME( CMACH, 'O' ) ) THEN
137: RMACH = HUGE(ZERO)
138: ELSE
139: RMACH = ZERO
140: END IF
141: *
142: SLAMCH = RMACH
143: RETURN
144: *
145: * End of SLAMCH
146: *
147: END
148: ************************************************************************
149: *> \brief \b SLAMC3
150: *> \details
151: *> \b Purpose:
152: *> \verbatim
153: *> SLAMC3 is intended to force A and B to be stored prior to doing
154: *> the addition of A and B , for use in situations where optimizers
155: *> might hold one of these in a register.
156: *> \endverbatim
157: *> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..
158: *> \date November 2011
159: *> \ingroup auxOTHERauxiliary
160: *>
161: *> \param[in] A
162: *> \verbatim
163: *> \endverbatim
164: *>
165: *> \param[in] B
166: *> \verbatim
167: *> The values A and B.
168: *> \endverbatim
169: *>
170: *
171: REAL FUNCTION SLAMC3( A, B )
172: *
173: * -- LAPACK auxiliary routine (version 3.4.0) --
174: * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
175: * November 2010
176: *
177: * .. Scalar Arguments ..
178: REAL A, B
179: * ..
180: * =====================================================================
181: *
182: * .. Executable Statements ..
183: *
184: SLAMC3 = A + B
185: *
186: RETURN
187: *
188: * End of SLAMC3
189: *
190: END
191: *
192: ************************************************************************
CVSweb interface <joel.bertrand@systella.fr>