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

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: *
        !            59: *> \date November 2011
        !            60: *
        !            61: *> \ingroup auxOTHERauxiliary
        !            62: *
        !            63: *  =====================================================================
1.1       bertrand   64:       DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
                     65: *
1.10    ! bertrand   66: *  -- LAPACK auxiliary routine (version 3.4.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.10    ! bertrand   69: *     November 2011
1.1       bertrand   70: *
                     71: *     .. Scalar Arguments ..
                     72:       CHARACTER          CMACH
                     73: *     ..
                     74: *
1.10    ! bertrand   75: *     .. Scalar Arguments ..
        !            76:       DOUBLE PRECISION   A, B
        !            77: *     ..
1.1       bertrand   78: *
                     79: * =====================================================================
                     80: *
                     81: *     .. Parameters ..
                     82:       DOUBLE PRECISION   ONE, ZERO
                     83:       PARAMETER          ( ONE = 1.0D+0, ZERO = 0.0D+0 )
                     84: *     ..
                     85: *     .. Local Scalars ..
1.7       bertrand   86:       DOUBLE PRECISION   RND, EPS, SFMIN, SMALL, RMACH
1.1       bertrand   87: *     ..
                     88: *     .. External Functions ..
                     89:       LOGICAL            LSAME
                     90:       EXTERNAL           LSAME
                     91: *     ..
1.7       bertrand   92: *     .. Intrinsic Functions ..
                     93:       INTRINSIC          DIGITS, EPSILON, HUGE, MAXEXPONENT,
                     94:      $                   MINEXPONENT, RADIX, TINY
1.1       bertrand   95: *     ..
                     96: *     .. Executable Statements ..
                     97: *
1.7       bertrand   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)
1.1       bertrand  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
1.7       bertrand  123:          RMACH = RADIX(ZERO)
1.1       bertrand  124:       ELSE IF( LSAME( CMACH, 'P' ) ) THEN
1.7       bertrand  125:          RMACH = EPS * RADIX(ZERO)
1.1       bertrand  126:       ELSE IF( LSAME( CMACH, 'N' ) ) THEN
1.7       bertrand  127:          RMACH = DIGITS(ZERO)
1.1       bertrand  128:       ELSE IF( LSAME( CMACH, 'R' ) ) THEN
                    129:          RMACH = RND
                    130:       ELSE IF( LSAME( CMACH, 'M' ) ) THEN
1.7       bertrand  131:          RMACH = MINEXPONENT(ZERO)
1.1       bertrand  132:       ELSE IF( LSAME( CMACH, 'U' ) ) THEN
1.7       bertrand  133:          RMACH = tiny(zero)
1.1       bertrand  134:       ELSE IF( LSAME( CMACH, 'L' ) ) THEN
1.7       bertrand  135:          RMACH = MAXEXPONENT(ZERO)
1.1       bertrand  136:       ELSE IF( LSAME( CMACH, 'O' ) ) THEN
1.7       bertrand  137:          RMACH = HUGE(ZERO)
                    138:       ELSE
                    139:          RMACH = ZERO
1.1       bertrand  140:       END IF
                    141: *
                    142:       DLAMCH = RMACH
                    143:       RETURN
                    144: *
                    145: *     End of DLAMCH
                    146: *
                    147:       END
                    148: ************************************************************************
1.10    ! bertrand  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: *>
1.1       bertrand  172:       DOUBLE PRECISION FUNCTION DLAMC3( A, B )
                    173: *
1.10    ! bertrand  174: *  -- LAPACK auxiliary routine (version 3.4.0) --
1.1       bertrand  175: *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd..
1.7       bertrand  176: *     November 2010
1.1       bertrand  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: ************************************************************************

CVSweb interface <joel.bertrand@systella.fr>