Annotation of rpl/lapack/lapack/dlamch.f, revision 1.17

1.10      bertrand    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: *
1.17    ! bertrand   59: *> \date November 2015
1.10      bertrand   60: *
                     61: *> \ingroup auxOTHERauxiliary
                     62: *
                     63: *  =====================================================================
1.1       bertrand   64:       DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
                     65: *
1.17    ! bertrand   66: *  -- LAPACK auxiliary routine (version 3.6.0) --
1.7       bertrand   67: *  -- LAPACK is a software package provided by Univ. of Tennessee,    --
                     68: *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..--
1.17    ! bertrand   69: *     November 2015
1.1       bertrand   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 ..
1.7       bertrand   82:       DOUBLE PRECISION   RND, EPS, SFMIN, SMALL, RMACH
1.1       bertrand   83: *     ..
                     84: *     .. External Functions ..
                     85:       LOGICAL            LSAME
                     86:       EXTERNAL           LSAME
                     87: *     ..
1.7       bertrand   88: *     .. Intrinsic Functions ..
                     89:       INTRINSIC          DIGITS, EPSILON, HUGE, MAXEXPONENT,
                     90:      $                   MINEXPONENT, RADIX, TINY
1.1       bertrand   91: *     ..
                     92: *     .. Executable Statements ..
                     93: *
1.7       bertrand   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)
1.1       bertrand  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
1.7       bertrand  119:          RMACH = RADIX(ZERO)
1.1       bertrand  120:       ELSE IF( LSAME( CMACH, 'P' ) ) THEN
1.7       bertrand  121:          RMACH = EPS * RADIX(ZERO)
1.1       bertrand  122:       ELSE IF( LSAME( CMACH, 'N' ) ) THEN
1.7       bertrand  123:          RMACH = DIGITS(ZERO)
1.1       bertrand  124:       ELSE IF( LSAME( CMACH, 'R' ) ) THEN
                    125:          RMACH = RND
                    126:       ELSE IF( LSAME( CMACH, 'M' ) ) THEN
1.7       bertrand  127:          RMACH = MINEXPONENT(ZERO)
1.1       bertrand  128:       ELSE IF( LSAME( CMACH, 'U' ) ) THEN
1.7       bertrand  129:          RMACH = tiny(zero)
1.1       bertrand  130:       ELSE IF( LSAME( CMACH, 'L' ) ) THEN
1.7       bertrand  131:          RMACH = MAXEXPONENT(ZERO)
1.1       bertrand  132:       ELSE IF( LSAME( CMACH, 'O' ) ) THEN
1.7       bertrand  133:          RMACH = HUGE(ZERO)
                    134:       ELSE
                    135:          RMACH = ZERO
1.1       bertrand  136:       END IF
                    137: *
                    138:       DLAMCH = RMACH
                    139:       RETURN
                    140: *
                    141: *     End of DLAMCH
                    142: *
                    143:       END
                    144: ************************************************************************
1.10      bertrand  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..
1.17    ! bertrand  154: *> \date November 2015
1.10      bertrand  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: *>
1.1       bertrand  168:       DOUBLE PRECISION FUNCTION DLAMC3( A, B )
                    169: *
1.17    ! bertrand  170: *  -- LAPACK auxiliary routine (version 3.6.0) --
1.1       bertrand  171: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
1.7       bertrand  172: *     November 2010
1.1       bertrand  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: ************************************************************************

CVSweb interface <joel.bertrand@systella.fr>