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