github.com/gonum/lapack@v0.0.0-20181123203213-e4cdc5a0bff9/internal/testdata/dsterftest/dlamch.f (about) 1 *> \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 * .. Scalar Arguments .. 76 DOUBLE PRECISION A, B 77 * .. 78 * 79 * ===================================================================== 80 * 81 * .. Parameters .. 82 DOUBLE PRECISION ONE, ZERO 83 PARAMETER ( ONE = 1.0D+0, ZERO = 0.0D+0 ) 84 * .. 85 * .. Local Scalars .. 86 DOUBLE PRECISION 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 DLAMCH = RMACH 143 RETURN 144 * 145 * End of DLAMCH 146 * 147 END 148 ************************************************************************ 149 *> \brief \b DLAMC3 150 *> \details 151 *> \b Purpose: 152 *> \verbatim 153 *> DLAMC3 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 *> A is a DOUBLE PRECISION 164 *> \endverbatim 165 *> 166 *> \param[in] B 167 *> \verbatim 168 *> B is a DOUBLE PRECISION 169 *> The values A and B. 170 *> \endverbatim 171 *> 172 DOUBLE PRECISION FUNCTION DLAMC3( A, B ) 173 * 174 * -- LAPACK auxiliary routine (version 3.4.0) -- 175 * Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. 176 * November 2010 177 * 178 * .. Scalar Arguments .. 179 DOUBLE PRECISION A, B 180 * .. 181 * ===================================================================== 182 * 183 * .. Executable Statements .. 184 * 185 DLAMC3 = A + B 186 * 187 RETURN 188 * 189 * End of DLAMC3 190 * 191 END 192 * 193 ************************************************************************