diff --git a/lemon/lp_base.h b/lemon/lp_base.h --- a/lemon/lp_base.h +++ b/lemon/lp_base.h @@ -597,11 +597,11 @@ const Value &upperBound() const { return _ub; } ///Is the constraint lower bounded? bool lowerBounded() const { - return _lb != -INF && !std::isnan(_lb); + return _lb != -INF && !isnan(_lb); } ///Is the constraint upper bounded? bool upperBounded() const { - return _ub != INF && !std::isnan(_ub); + return _ub != INF && !isnan(_ub); } }; @@ -1666,7 +1666,7 @@ inline LpBase::Constr operator<=(const LpBase::Value &n, const LpBase::Constr &c) { LpBase::Constr tmp(c); - LEMON_ASSERT(std::isnan(tmp.lowerBound()), "Wrong LP constraint"); + LEMON_ASSERT(isnan(tmp.lowerBound()), "Wrong LP constraint"); tmp.lowerBound()=n; return tmp; } @@ -1678,7 +1678,7 @@ const LpBase::Value &n) { LpBase::Constr tmp(c); - LEMON_ASSERT(std::isnan(tmp.upperBound()), "Wrong LP constraint"); + LEMON_ASSERT(isnan(tmp.upperBound()), "Wrong LP constraint"); tmp.upperBound()=n; return tmp; } @@ -1690,7 +1690,7 @@ inline LpBase::Constr operator>=(const LpBase::Value &n, const LpBase::Constr &c) { LpBase::Constr tmp(c); - LEMON_ASSERT(std::isnan(tmp.upperBound()), "Wrong LP constraint"); + LEMON_ASSERT(isnan(tmp.upperBound()), "Wrong LP constraint"); tmp.upperBound()=n; return tmp; } @@ -1702,7 +1702,7 @@ const LpBase::Value &n) { LpBase::Constr tmp(c); - LEMON_ASSERT(std::isnan(tmp.lowerBound()), "Wrong LP constraint"); + LEMON_ASSERT(isnan(tmp.lowerBound()), "Wrong LP constraint"); tmp.lowerBound()=n; return tmp; } diff --git a/lemon/math.h b/lemon/math.h --- a/lemon/math.h +++ b/lemon/math.h @@ -55,6 +55,15 @@ /// 1/sqrt(2) const long double SQRT1_2 = 0.7071067811865475244008443621048490L; + ///Check whether the parameter is NaN or not + + ///This function checks whether the parameter is NaN or not. + ///Is should be equivalent with std::isnan(), but it is not + ///provided by all compilers. + inline bool isnan(double v) + { + return v!=v; + } /// @}