github.com/gonum/lapack@v0.0.0-20181123203213-e4cdc5a0bff9/internal/testdata/netlib/dlamch.f (about)

     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 2015
    60  *
    61  *> \ingroup auxOTHERauxiliary
    62  *
    63  *  =====================================================================
    64        DOUBLE PRECISION FUNCTION DLAMCH( CMACH )
    65  *
    66  *  -- LAPACK auxiliary routine (version 3.6.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 2015
    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 2015
   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.6.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  ************************************************************************