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* ===================================================================== 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************************************************************************ 190