![]() |
LAPACK
3.4.1
LAPACK: Linear Algebra PACKage
|
00001 *> \brief \b DLAMCH 00002 * 00003 * =========== DOCUMENTATION =========== 00004 * 00005 * Online html documentation available at 00006 * http://www.netlib.org/lapack/explore-html/ 00007 * 00008 * Definition: 00009 * =========== 00010 * 00011 * DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) 00012 * 00013 * 00014 *> \par Purpose: 00015 * ============= 00016 *> 00017 *> \verbatim 00018 *> 00019 *> DLAMCH determines double precision machine parameters. 00020 *> \endverbatim 00021 * 00022 * Arguments: 00023 * ========== 00024 * 00025 *> \param[in] CMACH 00026 *> \verbatim 00027 *> Specifies the value to be returned by DLAMCH: 00028 *> = 'E' or 'e', DLAMCH := eps 00029 *> = 'S' or 's , DLAMCH := sfmin 00030 *> = 'B' or 'b', DLAMCH := base 00031 *> = 'P' or 'p', DLAMCH := eps*base 00032 *> = 'N' or 'n', DLAMCH := t 00033 *> = 'R' or 'r', DLAMCH := rnd 00034 *> = 'M' or 'm', DLAMCH := emin 00035 *> = 'U' or 'u', DLAMCH := rmin 00036 *> = 'L' or 'l', DLAMCH := emax 00037 *> = 'O' or 'o', DLAMCH := rmax 00038 *> where 00039 *> eps = relative machine precision 00040 *> sfmin = safe minimum, such that 1/sfmin does not overflow 00041 *> base = base of the machine 00042 *> prec = eps*base 00043 *> t = number of (base) digits in the mantissa 00044 *> rnd = 1.0 when rounding occurs in addition, 0.0 otherwise 00045 *> emin = minimum exponent before (gradual) underflow 00046 *> rmin = underflow threshold - base**(emin-1) 00047 *> emax = largest exponent before overflow 00048 *> rmax = overflow threshold - (base**emax)*(1-eps) 00049 *> \endverbatim 00050 * 00051 * Authors: 00052 * ======== 00053 * 00054 *> \author Univ. of Tennessee 00055 *> \author Univ. of California Berkeley 00056 *> \author Univ. of Colorado Denver 00057 *> \author NAG Ltd. 00058 * 00059 *> \date November 2011 00060 * 00061 *> \ingroup auxOTHERauxiliary 00062 * 00063 * ===================================================================== 00064 DOUBLE PRECISION FUNCTION DLAMCH( CMACH ) 00065 * 00066 * -- LAPACK auxiliary routine (version 3.4.0) -- 00067 * -- LAPACK is a software package provided by Univ. of Tennessee, -- 00068 * -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- 00069 * November 2011 00070 * 00071 * .. Scalar Arguments .. 00072 CHARACTER CMACH 00073 * .. 00074 * 00075 * ===================================================================== 00076 * 00077 * .. Parameters .. 00078 DOUBLE PRECISION ONE, ZERO 00079 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) 00080 * .. 00081 * .. Local Scalars .. 00082 DOUBLE PRECISION RND, EPS, SFMIN, SMALL, RMACH 00083 * .. 00084 * .. External Functions .. 00085 LOGICAL LSAME 00086 EXTERNAL LSAME 00087 * .. 00088 * .. Intrinsic Functions .. 00089 INTRINSIC DIGITS, EPSILON, HUGE, MAXEXPONENT, 00090 $ MINEXPONENT, RADIX, TINY 00091 * .. 00092 * .. Executable Statements .. 00093 * 00094 * 00095 * Assume rounding, not chopping. Always. 00096 * 00097 RND = ONE 00098 * 00099 IF( ONE.EQ.RND ) THEN 00100 EPS = EPSILON(ZERO) * 0.5 00101 ELSE 00102 EPS = EPSILON(ZERO) 00103 END IF 00104 * 00105 IF( LSAME( CMACH, 'E' ) ) THEN 00106 RMACH = EPS 00107 ELSE IF( LSAME( CMACH, 'S' ) ) THEN 00108 SFMIN = TINY(ZERO) 00109 SMALL = ONE / HUGE(ZERO) 00110 IF( SMALL.GE.SFMIN ) THEN 00111 * 00112 * Use SMALL plus a bit, to avoid the possibility of rounding 00113 * causing overflow when computing 1/sfmin. 00114 * 00115 SFMIN = SMALL*( ONE+EPS ) 00116 END IF 00117 RMACH = SFMIN 00118 ELSE IF( LSAME( CMACH, 'B' ) ) THEN 00119 RMACH = RADIX(ZERO) 00120 ELSE IF( LSAME( CMACH, 'P' ) ) THEN 00121 RMACH = EPS * RADIX(ZERO) 00122 ELSE IF( LSAME( CMACH, 'N' ) ) THEN 00123 RMACH = DIGITS(ZERO) 00124 ELSE IF( LSAME( CMACH, 'R' ) ) THEN 00125 RMACH = RND 00126 ELSE IF( LSAME( CMACH, 'M' ) ) THEN 00127 RMACH = MINEXPONENT(ZERO) 00128 ELSE IF( LSAME( CMACH, 'U' ) ) THEN 00129 RMACH = tiny(zero) 00130 ELSE IF( LSAME( CMACH, 'L' ) ) THEN 00131 RMACH = MAXEXPONENT(ZERO) 00132 ELSE IF( LSAME( CMACH, 'O' ) ) THEN 00133 RMACH = HUGE(ZERO) 00134 ELSE 00135 RMACH = ZERO 00136 END IF 00137 * 00138 DLAMCH = RMACH 00139 RETURN 00140 * 00141 * End of DLAMCH 00142 * 00143 END 00144 ************************************************************************ 00145 *> \brief \b DLAMC3 00146 *> \details 00147 *> \b Purpose: 00148 *> \verbatim 00149 *> DLAMC3 is intended to force A and B to be stored prior to doing 00150 *> the addition of A and B , for use in situations where optimizers 00151 *> might hold one of these in a register. 00152 *> \endverbatim 00153 *> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. 00154 *> \date November 2011 00155 *> \ingroup auxOTHERauxiliary 00156 *> 00157 *> \param[in] A 00158 *> \verbatim 00159 *> A is a DOUBLE PRECISION 00160 *> \endverbatim 00161 *> 00162 *> \param[in] B 00163 *> \verbatim 00164 *> B is a DOUBLE PRECISION 00165 *> The values A and B. 00166 *> \endverbatim 00167 *> 00168 DOUBLE PRECISION FUNCTION DLAMC3( A, B ) 00169 * 00170 * -- LAPACK auxiliary routine (version 3.4.0) -- 00171 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 00172 * November 2010 00173 * 00174 * .. Scalar Arguments .. 00175 DOUBLE PRECISION A, B 00176 * .. 00177 * ===================================================================== 00178 * 00179 * .. Executable Statements .. 00180 * 00181 DLAMC3 = A + B 00182 * 00183 RETURN 00184 * 00185 * End of DLAMC3 00186 * 00187 END 00188 * 00189 ************************************************************************