Main Page | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | Related Pages

CoinFloatEqual.hpp

Go to the documentation of this file.
00001 // Copyright (C) 2000, International Business Machines
00002 // Corporation and others.  All Rights Reserved.
00003 #ifndef CoinFloatEqual_H
00004 #define CoinFloatEqual_H
00005 
00006 #include <algorithm>
00007 #
00008 #include <cmath>
00009 
00010 #include "CoinFinite.hpp"
00011 
00044 class CoinAbsFltEq
00045 {
00046   public:
00047 
00049 
00050   inline bool operator() (const double f1, const double f2) const
00051 
00052   { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ;
00053     if (f1 == f2) return true ;
00054     return (fabs(f1-f2) < epsilon_) ; } ;
00055 
00058 
00060 
00061   CoinAbsFltEq () : epsilon_(1.e-10) {} ;
00062 
00064 
00065   CoinAbsFltEq (const double epsilon) : epsilon_(epsilon) {} ;
00066 
00068 
00069   virtual ~CoinAbsFltEq () {} ;
00070 
00072 
00073   CoinAbsFltEq (const CoinAbsFltEq& src) : epsilon_(src.epsilon_) {} ;
00074 
00076 
00077   CoinAbsFltEq& operator= (const CoinAbsFltEq& rhs)
00078 
00079   { if (this != &rhs) epsilon_ = rhs.epsilon_ ;
00080     return (*this) ; } ;
00081 
00083 
00084   private:  
00085 
00088 
00090 
00091   double epsilon_ ;
00092 
00094 
00095 } ;
00096 
00097 
00098 
00105 class CoinRelFltEq
00106 {
00107   public:
00108 
00110 
00111   inline bool operator() (const double f1, const double f2) const
00112 
00113   { if (CoinIsnan(f1) || CoinIsnan(f2)) return false ;
00114     if (f1 == f2) return true ;
00115     if (!CoinFinite(f1) || !CoinFinite(f2)) return false ;
00116 
00117     double tol = (fabs(f1)>fabs(f2))?fabs(f1):fabs(f2) ;
00118 
00119     return (fabs(f1-f2) <= epsilon_*(1+tol)) ; }
00120 
00123 
00125 
00126   CoinRelFltEq () : epsilon_(1.e-10) {} ;
00127 
00129 
00130   CoinRelFltEq (const double epsilon) : epsilon_(epsilon) {} ;
00131 
00133 
00134   virtual ~CoinRelFltEq () {} ;
00135 
00137 
00138   CoinRelFltEq (const CoinRelFltEq & src) : epsilon_(src.epsilon_) {} ;
00139 
00141 
00142   CoinRelFltEq& operator= (const CoinRelFltEq& rhs)
00143 
00144   { if (this != &rhs) epsilon_ = rhs.epsilon_ ;
00145     return (*this) ; } ;
00146 
00148 
00149 private: 
00150 
00153 
00155 
00156   double epsilon_ ;
00157 
00159 
00160 } ;
00161 
00162 #endif

Generated on Wed Dec 3 14:34:18 2003 for Coin by doxygen 1.3.5