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