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