|  | *> \brief \b SLAMCH | 
|  | * | 
|  | *  =========== DOCUMENTATION =========== | 
|  | * | 
|  | * Online html documentation available at | 
|  | *            http://www.netlib.org/lapack/explore-html/ | 
|  | * | 
|  | *  Definition: | 
|  | *  =========== | 
|  | * | 
|  | *      REAL             FUNCTION SLAMCH( CMACH ) | 
|  | * | 
|  | *     .. Scalar Arguments .. | 
|  | *      CHARACTER          CMACH | 
|  | *     .. | 
|  | * | 
|  | * | 
|  | *> \par Purpose: | 
|  | *  ============= | 
|  | *> | 
|  | *> \verbatim | 
|  | *> | 
|  | *> SLAMCH determines single precision machine parameters. | 
|  | *> \endverbatim | 
|  | * | 
|  | *  Arguments: | 
|  | *  ========== | 
|  | * | 
|  | *> \param[in] CMACH | 
|  | *> \verbatim | 
|  | *>          Specifies the value to be returned by SLAMCH: | 
|  | *>          = 'E' or 'e',   SLAMCH := eps | 
|  | *>          = 'S' or 's ,   SLAMCH := sfmin | 
|  | *>          = 'B' or 'b',   SLAMCH := base | 
|  | *>          = 'P' or 'p',   SLAMCH := eps*base | 
|  | *>          = 'N' or 'n',   SLAMCH := t | 
|  | *>          = 'R' or 'r',   SLAMCH := rnd | 
|  | *>          = 'M' or 'm',   SLAMCH := emin | 
|  | *>          = 'U' or 'u',   SLAMCH := rmin | 
|  | *>          = 'L' or 'l',   SLAMCH := emax | 
|  | *>          = 'O' or 'o',   SLAMCH := rmax | 
|  | *>          where | 
|  | *>          eps   = relative machine precision | 
|  | *>          sfmin = safe minimum, such that 1/sfmin does not overflow | 
|  | *>          base  = base of the machine | 
|  | *>          prec  = eps*base | 
|  | *>          t     = number of (base) digits in the mantissa | 
|  | *>          rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise | 
|  | *>          emin  = minimum exponent before (gradual) underflow | 
|  | *>          rmin  = underflow threshold - base**(emin-1) | 
|  | *>          emax  = largest exponent before overflow | 
|  | *>          rmax  = overflow threshold  - (base**emax)*(1-eps) | 
|  | *> \endverbatim | 
|  | * | 
|  | *  Authors: | 
|  | *  ======== | 
|  | * | 
|  | *> \author Univ. of Tennessee | 
|  | *> \author Univ. of California Berkeley | 
|  | *> \author Univ. of Colorado Denver | 
|  | *> \author NAG Ltd. | 
|  | * | 
|  | *> \date November 2011 | 
|  | * | 
|  | *> \ingroup auxOTHERauxiliary | 
|  | * | 
|  | *  ===================================================================== | 
|  | REAL             FUNCTION SLAMCH( CMACH ) | 
|  | * | 
|  | *  -- LAPACK auxiliary routine (version 3.4.0) -- | 
|  | *  -- LAPACK is a software package provided by Univ. of Tennessee,    -- | 
|  | *  -- Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd..-- | 
|  | *     November 2011 | 
|  | * | 
|  | *     .. Scalar Arguments .. | 
|  | CHARACTER          CMACH | 
|  | *     .. | 
|  | * | 
|  | * ===================================================================== | 
|  | * | 
|  | *     .. Parameters .. | 
|  | REAL               ONE, ZERO | 
|  | PARAMETER          ( ONE = 1.0E+0, ZERO = 0.0E+0 ) | 
|  | *     .. | 
|  | *     .. Local Scalars .. | 
|  | REAL               RND, EPS, SFMIN, SMALL, RMACH | 
|  | *     .. | 
|  | *     .. External Functions .. | 
|  | LOGICAL            LSAME | 
|  | EXTERNAL           LSAME | 
|  | *     .. | 
|  | *     .. Intrinsic Functions .. | 
|  | INTRINSIC          DIGITS, EPSILON, HUGE, MAXEXPONENT, | 
|  | $                   MINEXPONENT, RADIX, TINY | 
|  | *     .. | 
|  | *     .. Executable Statements .. | 
|  | * | 
|  | * | 
|  | *     Assume rounding, not chopping. Always. | 
|  | * | 
|  | RND = ONE | 
|  | * | 
|  | IF( ONE.EQ.RND ) THEN | 
|  | EPS = EPSILON(ZERO) * 0.5 | 
|  | ELSE | 
|  | EPS = EPSILON(ZERO) | 
|  | END IF | 
|  | * | 
|  | IF( LSAME( CMACH, 'E' ) ) THEN | 
|  | RMACH = EPS | 
|  | ELSE IF( LSAME( CMACH, 'S' ) ) THEN | 
|  | SFMIN = TINY(ZERO) | 
|  | SMALL = ONE / HUGE(ZERO) | 
|  | IF( SMALL.GE.SFMIN ) THEN | 
|  | * | 
|  | *           Use SMALL plus a bit, to avoid the possibility of rounding | 
|  | *           causing overflow when computing  1/sfmin. | 
|  | * | 
|  | SFMIN = SMALL*( ONE+EPS ) | 
|  | END IF | 
|  | RMACH = SFMIN | 
|  | ELSE IF( LSAME( CMACH, 'B' ) ) THEN | 
|  | RMACH = RADIX(ZERO) | 
|  | ELSE IF( LSAME( CMACH, 'P' ) ) THEN | 
|  | RMACH = EPS * RADIX(ZERO) | 
|  | ELSE IF( LSAME( CMACH, 'N' ) ) THEN | 
|  | RMACH = DIGITS(ZERO) | 
|  | ELSE IF( LSAME( CMACH, 'R' ) ) THEN | 
|  | RMACH = RND | 
|  | ELSE IF( LSAME( CMACH, 'M' ) ) THEN | 
|  | RMACH = MINEXPONENT(ZERO) | 
|  | ELSE IF( LSAME( CMACH, 'U' ) ) THEN | 
|  | RMACH = tiny(zero) | 
|  | ELSE IF( LSAME( CMACH, 'L' ) ) THEN | 
|  | RMACH = MAXEXPONENT(ZERO) | 
|  | ELSE IF( LSAME( CMACH, 'O' ) ) THEN | 
|  | RMACH = HUGE(ZERO) | 
|  | ELSE | 
|  | RMACH = ZERO | 
|  | END IF | 
|  | * | 
|  | SLAMCH = RMACH | 
|  | RETURN | 
|  | * | 
|  | *     End of SLAMCH | 
|  | * | 
|  | END | 
|  | ************************************************************************ | 
|  | *> \brief \b SLAMC3 | 
|  | *> \details | 
|  | *> \b Purpose: | 
|  | *> \verbatim | 
|  | *> SLAMC3  is intended to force  A  and  B  to be stored prior to doing | 
|  | *> the addition of  A  and  B ,  for use in situations where optimizers | 
|  | *> might hold one of these in a register. | 
|  | *> \endverbatim | 
|  | *> \author LAPACK is a software package provided by Univ. of Tennessee, Univ. of California Berkeley, Univ. of Colorado Denver and NAG Ltd.. | 
|  | *> \date November 2011 | 
|  | *> \ingroup auxOTHERauxiliary | 
|  | *> | 
|  | *> \param[in] A | 
|  | *> \verbatim | 
|  | *> \endverbatim | 
|  | *> | 
|  | *> \param[in] B | 
|  | *> \verbatim | 
|  | *>          The values A and B. | 
|  | *> \endverbatim | 
|  | *> | 
|  | * | 
|  | REAL             FUNCTION SLAMC3( A, B ) | 
|  | * | 
|  | *  -- LAPACK auxiliary routine (version 3.4.0) -- | 
|  | *     Univ. of Tennessee, Univ. of California Berkeley and NAG Ltd.. | 
|  | *     November 2010 | 
|  | * | 
|  | *     .. Scalar Arguments .. | 
|  | REAL               A, B | 
|  | *     .. | 
|  | * ===================================================================== | 
|  | * | 
|  | *     .. Executable Statements .. | 
|  | * | 
|  | SLAMC3 = A + B | 
|  | * | 
|  | RETURN | 
|  | * | 
|  | *     End of SLAMC3 | 
|  | * | 
|  | END | 
|  | * | 
|  | ************************************************************************ |