|
Go to the documentation of this file. 30 #ifndef _SPXDEFINES_H_ 31 #define _SPXDEFINES_H_ 42 #define SOPLEX_VERSION 221 43 #define SOPLEX_SUBVERSION 0 60 #if defined (NDEBUG) && defined (WITH_WARNINGS) 61 #define ASSERT_WARN( prefix, expr ) \ 66 << " failed assertion on line " << __LINE__ \ 67 << " in file " << __FILE__ << ": " \ 71 #else // just a normal assert 72 #define ASSERT_WARN( prefix, expr ) ( assert( expr ) ) 88 #ifdef DISABLE_VERBOSITY 89 #define DO_WITH_TMP_VERBOSITY( verbosity, spxout, do_something ) {} 90 #define DO_WITH_ERR_VERBOSITY( do_something ) {} 92 #define DO_WITH_TMP_VERBOSITY( verbosity, spxout, do_something ) \ 94 if( &spxout != NULL ) \ 96 if( verbosity <= spxout.getVerbosity() ) \ 98 const SPxOut::Verbosity old_verbosity = spxout.getVerbosity(); \ 99 spxout.setVerbosity( verbosity ); \ 101 spxout.setVerbosity( old_verbosity ); \ 105 #define DO_WITH_ERR_VERBOSITY( do_something ) { do_something; } 109 #define MSG_ERROR(x) { DO_WITH_ERR_VERBOSITY( x ) } 111 #define MSG_WARNING(spxout, x) { DO_WITH_TMP_VERBOSITY( SPxOut::WARNING, spxout, x ) } 113 #define MSG_INFO1(spxout, x) { DO_WITH_TMP_VERBOSITY( SPxOut::INFO1, spxout, x ) } 115 #define MSG_INFO2(spxout, x) { DO_WITH_TMP_VERBOSITY( SPxOut::INFO2, spxout, x ) } 117 #define MSG_INFO3(spxout, x) { DO_WITH_TMP_VERBOSITY( SPxOut::INFO3, spxout, x ) } 119 extern bool msginconsistent( const char* name, const char* file, int line); 121 #define MSGinconsistent(name) msginconsistent(name, __FILE__, __LINE__) 123 #if defined(SOPLEX_DEBUG) 125 #define MSG_DEBUG(x) { x; } 136 #ifdef WITH_LONG_DOUBLE 139 typedef long double Real; 143 #define REAL_FORMAT "Lf" 146 #ifndef DEFAULT_BND_VIOL 147 #define DEFAULT_BND_VIOL 1e-12 150 #ifndef DEFAULT_EPS_ZERO 151 #define DEFAULT_EPS_ZERO 1e-28 154 #ifndef DEFAULT_EPS_FACTOR 155 #define DEFAULT_EPS_FACTOR 1e-30 158 #ifndef DEFAULT_EPS_UPDATE 159 #define DEFAULT_EPS_UPDATE 1e-26 161 #ifndef DEFAULT_EPS_PIVOT 162 #define DEFAULT_EPS_PIVOT 1e-20 165 #define DEFAULT_INFINITY 1e100 176 #define REAL_FORMAT "f" 179 #ifndef DEFAULT_BND_VIOL 180 #define DEFAULT_BND_VIOL 1e-1 183 #ifndef DEFAULT_EPS_ZERO 184 #define DEFAULT_EPS_ZERO 1e-7 186 #ifndef DEFAULT_EPS_FACTOR 187 #define DEFAULT_EPS_FACTOR 1e-7 189 #ifndef DEFAULT_EPS_UPDATE 190 #define DEFAULT_EPS_UPDATE 1e-6 192 #ifndef DEFAULT_EPS_PIVOT 193 #define DEFAULT_EPS_PIVOT 1e-6 195 #define DEFAULT_INFINITY 1e100 204 #define REAL_FORMAT "lf" 207 #ifndef DEFAULT_BND_VIOL 208 #define DEFAULT_BND_VIOL 1e-6 211 #ifndef DEFAULT_EPS_ZERO 212 #define DEFAULT_EPS_ZERO 1e-16 214 #ifndef DEFAULT_EPS_FACTOR 215 #define DEFAULT_EPS_FACTOR 1e-20 217 #ifndef DEFAULT_EPS_UPDATE 218 #define DEFAULT_EPS_UPDATE 1e-16 220 #ifndef DEFAULT_EPS_PIVOT 221 #define DEFAULT_EPS_PIVOT 1e-10 223 #define DEFAULT_INFINITY 1e100 225 #endif // !WITH_FLOAT 226 #endif // !WITH_LONG_DOUBLE 228 #define MAXIMUM(x,y) ((x)>(y) ? (x) : (y)) 285 #ifdef WITH_LONG_DOUBLE 287 inline Real spxAbs(Real a) 299 #ifndef SOPLEX_LEGACY 302 return nextafterl(x,y); 307 inline Real spxLdexp(Real x, int exp) 309 return ldexpl(x,exp); 313 inline Real spxFrexp(Real y, int* exp) 315 return frexpl(y, exp); 331 #ifndef SOPLEX_LEGACY 335 return nextafter(x,y); 337 return _nextafter(x,y); 351 return frexp(y, exp); 358 const Real absa = spxAbs(a); 359 const Real absb = spxAbs(b); 361 return absa > absb ? absa : absb; 367 return (a - b) / ( maxAbs(a, b) > 1.0 ? maxAbs(a, b) : 1.0); 373 return spxAbs(a - b) <= eps; 379 return spxAbs(a - b) > eps; 385 return (a - b) < -eps; 391 return (a - b) < eps; 397 return (a - b) > eps; 403 return (a - b) > -eps; 455 #endif // _SPXDEFINES_H_ Rational spxAbs(const Rational &r) Absolute.
bool isNotZero(Real a, Real eps=Param::epsilon()) returns true iff |a| > eps
bool LTrel(Real a, Real b, Real eps=Param::epsilon()) returns true iff relDiff(a,b) <= -eps
bool GE(Real a, Real b, Real eps=Param::epsilon()) returns true iff a >= b + eps
static void setEpsilon(Real eps)
static Real s_epsilon default allowed additive zero: 1.0 + EPS_ZERO == 1.0
Real maxAbs(Real a, Real b) returns max(|a|,|b|)
bool msginconsistent(const char *name, const char *file, int line)
bool LE(Real a, Real b, Real eps=Param::epsilon()) returns true iff a <= b + eps
bool LT(Real a, Real b, Real eps=Param::epsilon()) returns true iff a < b + eps
static Real epsilonUpdate()
bool NE(Real a, Real b, Real eps=Param::epsilon()) returns true iff |a-b| > eps
static Real epsilonFactorization()
Real spxFrexp(Real y, int *exp)
Real spxLdexp(Real x, int exp) returns x * 2^exp
bool GT(Real a, Real b, Real eps=Param::epsilon()) returns true iff a > b + eps
static void setEpsilonPivot(Real eps)
Real spxSqrt(Real a) returns square root
static Real s_epsilon_factorization epsilon for factorization
bool GTrel(Real a, Real b, Real eps=Param::epsilon()) returns true iff relDiff(a,b) > eps
static Real s_epsilon_pivot epsilon for pivot zero tolerance in factorization
bool GErel(Real a, Real b, Real eps=Param::epsilon()) returns true iff relDiff(a,b) > -eps
bool EQ(Real a, Real b, Real eps=Param::epsilon()) returns true iff |a-b| <= eps
Everything should be within this namespace.
Real relDiff(Real a, Real b) returns (a-b) / max(|a|,|b|,1.0)
bool EQrel(Real a, Real b, Real eps=Param::epsilon()) returns true iff |relDiff(a,b)| <= eps
Real spxNextafter(Real x, Real y)
static void setEpsilonUpdate(Real eps)
bool NErel(Real a, Real b, Real eps=Param::epsilon()) returns true iff |relDiff(a,b)| > eps
bool LErel(Real a, Real b, Real eps=Param::epsilon()) returns true iff relDiff(a,b) <= eps
static void setEpsilonFactorization(Real eps)
bool isZero(Real a, Real eps=Param::epsilon()) returns true iff |a| <= eps
static Real epsilonPivot()
static Real s_epsilon_update epsilon for factorization update
|