MOOS 0.2375
/home/toby/moos-ivp/MOOS-2375-Oct0611/Thirdparty/newmat/precisio.h
Go to the documentation of this file.
00001 //$$ precisio.h                          floating point constants
00002 
00003 #ifndef PRECISION_LIB
00004 #define PRECISION_LIB 0
00005 
00006 #ifdef use_namespace
00007 namespace NEWMAT {
00008 #endif
00009 
00010 #ifdef _STANDARD_                 // standard library available
00011 
00012 #include <limits>
00013 using namespace std;
00014     
00015 class FloatingPointPrecision
00016 {
00017 public:
00018    static int Dig()              // number of decimal digits or precision
00019       { return numeric_limits<Real>::digits10 ; }
00020 
00021    static Real Epsilon()         // smallest number such that 1+Eps!=Eps
00022       { return numeric_limits<Real>::epsilon(); }
00023 
00024    static int Mantissa()         // bits in mantisa
00025       { return numeric_limits<Real>::digits; }
00026 
00027    static Real Maximum()         // maximum value
00028       { return numeric_limits<Real>::max(); }
00029 
00030    static int MaximumDecimalExponent()  // maximum decimal exponent
00031       { return numeric_limits<Real>::max_exponent10; }
00032 
00033    static int MaximumExponent()  // maximum binary exponent
00034       { return numeric_limits<Real>::max_exponent; }
00035 
00036    static Real LnMaximum()       // natural log of maximum
00037       { return (Real)log(Maximum()); }
00038 
00039    static Real Minimum()         // minimum positive value
00040       { return numeric_limits<Real>::min(); } 
00041 
00042    static int MinimumDecimalExponent() // minimum decimal exponent
00043       { return numeric_limits<Real>::min_exponent10; }
00044 
00045    static int MinimumExponent()  // minimum binary exponent
00046       { return numeric_limits<Real>::min_exponent; }
00047 
00048    static Real LnMinimum()       // natural log of minimum
00049       { return (Real)log(Minimum()); }
00050 
00051    static int Radix()            // exponent radix
00052       { return numeric_limits<Real>::radix; }
00053 
00054    static int Rounds()           // addition rounding (1 = does round)
00055    {
00056       return numeric_limits<Real>::round_style ==
00057          round_to_nearest ? 1 : 0;
00058    }
00059 
00060 };
00061 
00062 
00063 #else                              // _STANDARD_ not defined
00064 
00065 #ifndef SystemV                    // if there is float.h
00066 
00067 
00068 #ifdef USING_FLOAT
00069 
00070 
00071 class FloatingPointPrecision
00072 {
00073 public:
00074    static int Dig()
00075       { return FLT_DIG; }        // number of decimal digits or precision
00076 
00077    static Real Epsilon()
00078       { return FLT_EPSILON; }    // smallest number such that 1+Eps!=Eps
00079 
00080    static int Mantissa()
00081       { return FLT_MANT_DIG; }   // bits in mantisa
00082 
00083    static Real Maximum()
00084       { return FLT_MAX; }        // maximum value
00085 
00086    static int MaximumDecimalExponent()
00087       { return FLT_MAX_10_EXP; } // maximum decimal exponent
00088 
00089    static int MaximumExponent()
00090       { return FLT_MAX_EXP; }    // maximum binary exponent
00091 
00092    static Real LnMaximum()
00093       { return (Real)log(Maximum()); } // natural log of maximum
00094 
00095    static Real Minimum()
00096       { return FLT_MIN; }        // minimum positive value
00097 
00098    static int MinimumDecimalExponent()
00099       { return FLT_MIN_10_EXP; } // minimum decimal exponent
00100 
00101    static int MinimumExponent()
00102       { return FLT_MIN_EXP; }    // minimum binary exponent
00103 
00104    static Real LnMinimum()
00105       { return (Real)log(Minimum()); } // natural log of minimum
00106 
00107    static int Radix()
00108       { return FLT_RADIX; }      // exponent radix
00109 
00110    static int Rounds()
00111       { return FLT_ROUNDS; }     // addition rounding (1 = does round)
00112 
00113 };
00114 
00115 #endif                           // USING_FLOAT
00116 
00117 
00118 #ifdef USING_DOUBLE
00119 
00120 class FloatingPointPrecision
00121 {
00122 public:
00123 
00124    static int Dig()
00125       { return DBL_DIG; }        // number of decimal digits or precision
00126 
00127    static Real Epsilon()
00128       { return DBL_EPSILON; }    // smallest number such that 1+Eps!=Eps
00129 
00130    static int Mantissa()
00131       { return DBL_MANT_DIG; }   // bits in mantisa
00132 
00133    static Real Maximum()
00134       { return DBL_MAX; }        // maximum value
00135 
00136    static int MaximumDecimalExponent()
00137       { return DBL_MAX_10_EXP; } // maximum decimal exponent
00138 
00139    static int MaximumExponent()
00140       { return DBL_MAX_EXP; }    // maximum binary exponent
00141 
00142    static Real LnMaximum()
00143       { return (Real)log(Maximum()); } // natural log of maximum
00144 
00145    static Real Minimum()
00146    {
00147 //#ifdef __BCPLUSPLUS__
00148 //       return 2.225074e-308;     // minimum positive value
00149 //#else
00150        return DBL_MIN;
00151 //#endif
00152    }
00153 
00154    static int MinimumDecimalExponent()
00155       { return DBL_MIN_10_EXP; } // minimum decimal exponent
00156 
00157    static int MinimumExponent()
00158       { return DBL_MIN_EXP; }    // minimum binary exponent
00159 
00160    static Real LnMinimum()
00161       { return (Real)log(Minimum()); } // natural log of minimum
00162 
00163 
00164    static int Radix()
00165       { return FLT_RADIX; }      // exponent radix
00166 
00167    static int Rounds()
00168       { return FLT_ROUNDS; }     // addition rounding (1 = does round)
00169 
00170 };
00171 
00172 #endif                             // USING_DOUBLE
00173 
00174 #else                              // if there is no float.h
00175 
00176 #ifdef USING_FLOAT
00177 
00178 class FloatingPointPrecision
00179 {
00180 public:
00181 
00182    static Real Epsilon()
00183       { return pow(2.0,1-FSIGNIF); }  // smallest number such that 1+Eps!=Eps
00184 
00185    static Real Maximum()
00186       { return MAXFLOAT; }            // maximum value
00187 
00188    static Real LnMaximum()
00189       { return (Real)log(Maximum()); }  // natural log of maximum
00190 
00191    static Real Minimum()
00192       { return MINFLOAT; }            // minimum positive value
00193 
00194    static Real LnMinimum()
00195       { return (Real)log(Minimum()); }  // natural log of minimum
00196 
00197 };
00198 
00199 #endif                                  // USING_FLOAT
00200 
00201 
00202 #ifdef USING_DOUBLE
00203 
00204 class FloatingPointPrecision
00205 {
00206 public:
00207 
00208    static Real Epsilon()
00209       { return pow(2.0,1-DSIGNIF); }  // smallest number such that 1+Eps!=Eps
00210 
00211    static Real Maximum()
00212       { return MAXDOUBLE; }           // maximum value
00213 
00214    static Real LnMaximum()
00215       { return LN_MAXDOUBLE; }        // natural log of maximum
00216 
00217    static Real Minimum()
00218       { return MINDOUBLE; }
00219 
00220    static Real LnMinimum()
00221       { return LN_MINDOUBLE; }        // natural log of minimum
00222 };
00223 
00224 #endif                                // USING_DOUBLE
00225 
00226 #endif                                // SystemV
00227 
00228 #endif                                // _STANDARD_
00229 
00230 #ifdef use_namespace
00231 }
00232 #endif                                // use_namespace
00233 
00234 
00235 
00236 #endif                                // PRECISION_LIB
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines