lemon/lp_base.h
changeset 2495 e4f8367beb41
parent 2435 548f498fa059
child 2513 26983135fd6d
     1.1 --- a/lemon/lp_base.h	Fri Oct 12 22:19:03 2007 +0000
     1.2 +++ b/lemon/lp_base.h	Sat Oct 13 08:48:07 2007 +0000
     1.3 @@ -35,6 +35,23 @@
     1.4  ///\ingroup lp_group
     1.5  namespace lemon {
     1.6  
     1.7 +  /// Function to decide whether a floating point value is finite or not.
     1.8 +
     1.9 +  /// Retruns true if the argument is not infinity, minus infinity or NaN.
    1.10 +  /// It does the same as the isfinite() function defined by C99.
    1.11 +  template <typename T>
    1.12 +  bool isFinite(T value)
    1.13 +  {
    1.14 +    typedef std::numeric_limits<T> Lim;
    1.15 +    if (Lim::has_infinity && (value == Lim::infinity() || value ==
    1.16 +          -Lim::infinity()) ||
    1.17 +        (Lim::has_quiet_NaN || Lim::has_signaling_NaN) && value != value)
    1.18 +    {
    1.19 +      return false;
    1.20 +    }
    1.21 +    return true;
    1.22 +  }
    1.23 +
    1.24    ///Common base class for LP solvers
    1.25    
    1.26    ///\todo Much more docs
    1.27 @@ -457,13 +474,11 @@
    1.28        const Value &upperBound() const { return _ub; }
    1.29        ///Is the constraint lower bounded?
    1.30        bool lowerBounded() const { 
    1.31 -	using namespace std;
    1.32 -	return finite(_lb);
    1.33 +	return isFinite(_lb);
    1.34        }
    1.35        ///Is the constraint upper bounded?
    1.36        bool upperBounded() const {
    1.37 -	using namespace std;
    1.38 -	return finite(_ub);
    1.39 +	return isFinite(_ub);
    1.40        }
    1.41  
    1.42        void prettyPrint(std::ostream &os) {