kusano 7d535a
kusano 7d535a
<meta content="text/html;charset=UTF-8" http-equiv="Content-Type">
kusano 7d535a
<title>SuperLU: SRC/slamch.c File Reference</title>
kusano 7d535a
<link href="doxygen.css" rel="stylesheet" type="text/css">
kusano 7d535a
<link href="tabs.css" rel="stylesheet" type="text/css">
kusano 7d535a
kusano 7d535a
kusano 7d535a
kusano 7d535a
  
kusano 7d535a
    
    kusano 7d535a
          
  • Main Page
  • kusano 7d535a
          
  • Data Structures
  • kusano 7d535a
          
  • Files
  • kusano 7d535a
        
    kusano 7d535a
      
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    SRC/slamch.c File Reference

    Determines single precision machine parameters and other service routines. More...
    kusano 7d535a

    kusano 7d535a
    #include <stdio.h>
    kusano 7d535a
    #include "slu_Cnames.h"
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    Defines

    kusano 7d535a
    #define TRUE_   (1)
    kusano 7d535a
    kusano 7d535a
    #define FALSE_   (0)
    kusano 7d535a
    kusano 7d535a
    #define min(a, b)   ((a) <= (b) ? (a) : (b))
    kusano 7d535a
    kusano 7d535a
    #define max(a, b)   ((a) >= (b) ? (a) : (b))
    kusano 7d535a
    kusano 7d535a
    #define abs(x)   ((x) >= 0 ? (x) : -(x))
    kusano 7d535a
    kusano 7d535a
    #define dabs(x)   (double)abs(x)
    kusano 7d535a
    kusano 7d535a

    Functions

    kusano 7d535a
    float slamch_ (char *cmach)
    kusano 7d535a
    kusano 7d535a
    int slamc1_ (int *beta, int *t, int *rnd, int *ieee1)
    kusano 7d535a
    kusano 7d535a
    int slamc2_ (int *beta, int *t, int *rnd, float *eps, int *emin, float *rmin, int *emax, float *rmax)
    kusano 7d535a
    kusano 7d535a
    double slamc3_ (float *a, float *b)
    kusano 7d535a
    kusano 7d535a
    int slamc4_ (int *emin, float *start, int *base)
    kusano 7d535a
    kusano 7d535a
    int slamc5_ (int *beta, int *p, int *emin, int *ieee, int *emax, float *rmax)
    kusano 7d535a
    kusano 7d535a
    double pow_ri (float *ap, int *bp)
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    Detailed Description

    kusano 7d535a
    kusano 7d535a
       -- LAPACK auxiliary routine (version 2.0) --   
    kusano 7d535a
          Univ. of Tennessee, Univ. of California Berkeley, NAG Ltd.,   
    kusano 7d535a
          Courant Institute, Argonne National Lab, and Rice University   
    kusano 7d535a
          October 31, 1992   
    kusano 7d535a
      

    Define Documentation

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define abs          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ((x) >= 0 ? (x) : -(x))
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define dabs          
    kusano 7d535a
              (
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 (double)abs(x)
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define FALSE_   (0)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define max          
    kusano 7d535a
              (
    kusano 7d535a
              a,         
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ((a) >= (b) ? (a) : (b))
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define min          
    kusano 7d535a
              (
    kusano 7d535a
              a,         
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
    kusano 7d535a
                        
    kusano 7d535a
               ) 
    kusano 7d535a
                 ((a) <= (b) ? (a) : (b))
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              #define TRUE_   (1)          
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a

    Function Documentation

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              double pow_ri           
    kusano 7d535a
              (
    kusano 7d535a
              float * 
    kusano 7d535a
               ap, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               bp 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              int slamc1_           
    kusano 7d535a
              (
    kusano 7d535a
              int * 
    kusano 7d535a
               beta, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               t, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               rnd, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               ieee1 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
     Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMC1 determines the machine parameters given by BETA, T, RND, and   
    kusano 7d535a
        IEEE1.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        BETA    (output) INT   
    kusano 7d535a
                The base of the machine.

    kusano 7d535a
        T       (output) INT   
    kusano 7d535a
                The number of ( BETA ) digits in the mantissa.

    kusano 7d535a
        RND     (output) INT   
    kusano 7d535a
                Specifies whether proper rounding  ( RND = .TRUE. )  or   
    kusano 7d535a
                chopping  ( RND = .FALSE. )  occurs in addition. This may not

    kusano 7d535a
                be a reliable guide to the way in which the machine performs

    kusano 7d535a
                its arithmetic.

    kusano 7d535a
        IEEE1   (output) INT   
    kusano 7d535a
                Specifies whether rounding appears to be done in the IEEE   
    kusano 7d535a
                'round to nearest' style.

    kusano 7d535a
        Further Details   
    kusano 7d535a
        ===============

    kusano 7d535a
        The routine is based on the routine  ENVRON  by Malcolm and   
    kusano 7d535a
        incorporates suggestions by Gentleman and Marovich. See

    kusano 7d535a
           Malcolm M. A. (1972) Algorithms to reveal properties of   
    kusano 7d535a
              floating-point arithmetic. Comms. of the ACM, 15, 949-951.

    kusano 7d535a
           Gentleman W. M. and Marovich S. B. (1974) More on algorithms   
    kusano 7d535a
              that reveal properties of floating point arithmetic units.   
    kusano 7d535a
              Comms. of the ACM, 17, 276-277.

    kusano 7d535a
       ===================================================================== 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              int slamc2_           
    kusano 7d535a
              (
    kusano 7d535a
              int * 
    kusano 7d535a
               beta, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               t, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               rnd, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               eps, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               emin, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               rmin, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               emax, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               rmax 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
        Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMC2 determines the machine parameters specified in its argument   
    kusano 7d535a
        list.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        BETA    (output) INT   
    kusano 7d535a
                The base of the machine.

    kusano 7d535a
        T       (output) INT   
    kusano 7d535a
                The number of ( BETA ) digits in the mantissa.

    kusano 7d535a
        RND     (output) INT   
    kusano 7d535a
                Specifies whether proper rounding  ( RND = .TRUE. )  or   
    kusano 7d535a
                chopping  ( RND = .FALSE. )  occurs in addition. This may not

    kusano 7d535a
                be a reliable guide to the way in which the machine performs

    kusano 7d535a
                its arithmetic.

    kusano 7d535a
        EPS     (output) FLOAT   
    kusano 7d535a
                The smallest positive number such that

    kusano 7d535a
                   fl( 1.0 - EPS ) .LT. 1.0,

    kusano 7d535a
                where fl denotes the computed value.

    kusano 7d535a
        EMIN    (output) INT   
    kusano 7d535a
                The minimum exponent before (gradual) underflow occurs.

    kusano 7d535a
        RMIN    (output) FLOAT   
    kusano 7d535a
                The smallest normalized number for the machine, given by   
    kusano 7d535a
                BASE**( EMIN - 1 ), where  BASE  is the floating point value

    kusano 7d535a
                of BETA.

    kusano 7d535a
        EMAX    (output) INT   
    kusano 7d535a
                The maximum exponent before overflow occurs.

    kusano 7d535a
        RMAX    (output) FLOAT   
    kusano 7d535a
                The largest positive number for the machine, given by   
    kusano 7d535a
                BASE**EMAX * ( 1 - EPS ), where  BASE  is the floating point

    kusano 7d535a
                value of BETA.

    kusano 7d535a
        Further Details   
    kusano 7d535a
        ===============

    kusano 7d535a
        The computation of  EPS  is based on a routine PARANOIA by   
    kusano 7d535a
        W. Kahan of the University of California at Berkeley.

    kusano 7d535a
       ===================================================================== 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              double slamc3_           
    kusano 7d535a
              (
    kusano 7d535a
              float * 
    kusano 7d535a
               a, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               b 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
        Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMC3  is intended to force  A  and  B  to be stored prior to doing

    kusano 7d535a
        the addition of  A  and  B ,  for use in situations where optimizers

    kusano 7d535a
        might hold one of these in a register.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        A, B    (input) FLOAT   
    kusano 7d535a
                The values A and B.

    kusano 7d535a
       ===================================================================== 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              int slamc4_           
    kusano 7d535a
              (
    kusano 7d535a
              int * 
    kusano 7d535a
               emin, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               start, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               base 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
        Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMC4 is a service routine for SLAMC2.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        EMIN    (output) EMIN   
    kusano 7d535a
                The minimum exponent before (gradual) underflow, computed by

    kusano 7d535a
                setting A = START and dividing by BASE until the previous A   
    kusano 7d535a
                can not be recovered.

    kusano 7d535a
        START   (input) FLOAT   
    kusano 7d535a
                The starting point for determining EMIN.

    kusano 7d535a
        BASE    (input) INT   
    kusano 7d535a
                The base of the machine.

    kusano 7d535a
       ===================================================================== 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              int slamc5_           
    kusano 7d535a
              (
    kusano 7d535a
              int * 
    kusano 7d535a
               beta, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               p, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               emin, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               ieee, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              int * 
    kusano 7d535a
               emax, 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              
    kusano 7d535a
              float * 
    kusano 7d535a
               rmax 
    kusano 7d535a
            
    kusano 7d535a
            
    kusano 7d535a
              
    kusano 7d535a
              )
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
        Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMC5 attempts to compute RMAX, the largest machine floating-point   
    kusano 7d535a
        number, without overflow.  It assumes that EMAX + abs(EMIN) sum   
    kusano 7d535a
        approximately to a power of 2.  It will fail on machines where this   
    kusano 7d535a
        assumption does not hold, for example, the Cyber 205 (EMIN = -28625,

    kusano 7d535a
        EMAX = 28718).  It will also fail if the value supplied for EMIN is   
    kusano 7d535a
        too large (i.e. too close to zero), probably with overflow.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        BETA    (input) INT   
    kusano 7d535a
                The base of floating-point arithmetic.

    kusano 7d535a
        P       (input) INT   
    kusano 7d535a
                The number of base BETA digits in the mantissa of a   
    kusano 7d535a
                floating-point value.

    kusano 7d535a
        EMIN    (input) INT   
    kusano 7d535a
                The minimum exponent before (gradual) underflow.

    kusano 7d535a
        IEEE    (input) INT   
    kusano 7d535a
                A logical flag specifying whether or not the arithmetic   
    kusano 7d535a
                system is thought to comply with the IEEE standard.

    kusano 7d535a
        EMAX    (output) INT   
    kusano 7d535a
                The largest exponent before overflow

    kusano 7d535a
        RMAX    (output) FLOAT   
    kusano 7d535a
                The largest machine floating-point number.

    kusano 7d535a
       =====================================================================

    kusano 7d535a
           First compute LEXP and UEXP, two powers of 2 that bound   
    kusano 7d535a
           abs(EMIN). We then assume that EMAX + abs(EMIN) will sum   
    kusano 7d535a
           approximately to the bound that is closest to abs(EMIN).   
    kusano 7d535a
           (EMAX is the exponent of the required number RMAX). 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
          
    kusano 7d535a
            
    kusano 7d535a
              float slamch_           
    kusano 7d535a
              (
    kusano 7d535a
              char * 
    kusano 7d535a
               cmach          
    kusano 7d535a
               ) 
    kusano 7d535a
              
    kusano 7d535a
            
    kusano 7d535a
          
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a
     Purpose   
    kusano 7d535a
        =======

    kusano 7d535a
        SLAMCH determines single precision machine parameters.

    kusano 7d535a
        Arguments   
    kusano 7d535a
        =========

    kusano 7d535a
        CMACH   (input) CHARACTER*1   
    kusano 7d535a
                Specifies the value to be returned by SLAMCH:   
    kusano 7d535a
                = 'E' or 'e',   SLAMCH := eps   
    kusano 7d535a
                = 'S' or 's ,   SLAMCH := sfmin   
    kusano 7d535a
                = 'B' or 'b',   SLAMCH := base   
    kusano 7d535a
                = 'P' or 'p',   SLAMCH := eps*base   
    kusano 7d535a
                = 'N' or 'n',   SLAMCH := t   
    kusano 7d535a
                = 'R' or 'r',   SLAMCH := rnd   
    kusano 7d535a
                = 'M' or 'm',   SLAMCH := emin   
    kusano 7d535a
                = 'U' or 'u',   SLAMCH := rmin   
    kusano 7d535a
                = 'L' or 'l',   SLAMCH := emax   
    kusano 7d535a
                = 'O' or 'o',   SLAMCH := rmax

    kusano 7d535a
                where

    kusano 7d535a
                eps   = relative machine precision   
    kusano 7d535a
                sfmin = safe minimum, such that 1/sfmin does not overflow   
    kusano 7d535a
                base  = base of the machine   
    kusano 7d535a
                prec  = eps*base   
    kusano 7d535a
                t     = number of (base) digits in the mantissa   
    kusano 7d535a
                rnd   = 1.0 when rounding occurs in addition, 0.0 otherwise   
    kusano 7d535a
                emin  = minimum exponent before (gradual) underflow   
    kusano 7d535a
                rmin  = underflow threshold - base**(emin-1)   
    kusano 7d535a
                emax  = largest exponent before overflow   
    kusano 7d535a
                rmax  = overflow threshold  - (base**emax)*(1-eps)

    kusano 7d535a
       ===================================================================== 
    kusano 7d535a
     
    kusano 7d535a
    kusano 7d535a

    kusano 7d535a
    kusano 7d535a

    <address style="text-align: right;"><small>Generated on Mon Nov 22 10:23:48 2010 for SuperLU by </small></address>
    kusano 7d535a
    kusano 7d535a
    doxygen 1.5.5 
    kusano 7d535a
    kusano 7d535a