# HG changeset patch # User alpar # Date 1137577253 0 # Node ID dd90f57b01d1a74fc20c7832d1f359a1828c3c42 # Parent 92ef660710f1de0aff1e1669f98ad1673ca40991 Tolerance added diff -r 92ef660710f1 -r dd90f57b01d1 lemon/base.cc --- a/lemon/base.cc Sat Jan 14 13:42:37 2006 +0000 +++ b/lemon/base.cc Wed Jan 18 09:40:53 2006 +0000 @@ -21,8 +21,9 @@ #include namespace lemon { + float Tolerance::def_epsilon = 1e-4; double Tolerance::def_epsilon = 1e-10; - float Tolerance::def_epsilon = 1e-4; + long double Tolerance::def_epsilon = 1e-14; #ifndef LEMON_ONLY_TEMPLATES const Invalid INVALID = Invalid(); diff -r 92ef660710f1 -r dd90f57b01d1 lemon/tolerance.h --- a/lemon/tolerance.h Sat Jan 14 13:42:37 2006 +0000 +++ b/lemon/tolerance.h Wed Jan 18 09:40:53 2006 +0000 @@ -44,6 +44,7 @@ /// ///\sa Tolerance ///\sa Tolerance + ///\sa Tolerance ///\sa Tolerance ///\sa Tolerance @@ -82,6 +83,57 @@ }; + ///Float specialization of \ref Tolerance. + + ///Float specialization of \ref Tolerance. + ///\sa Tolerance + ///\relates Tolerance + template<> + class Tolerance + { + static float def_epsilon; + float _epsilon; + public: + ///\e + typedef float Value; + + ///Constructor setting the epsilon tolerance to the default value. + Tolerance() : _epsilon(def_epsilon) {} + ///Constructor setting the epsilon tolerance. + Tolerance(float e) : _epsilon(e) {} + + ///Return the epsilon value. + Value epsilon() {return _epsilon;} + ///Set the epsilon value. + void epsilon(Value e) {_epsilon=e;} + + ///Return the default epsilon value. + static Value defaultEpsilon() {return def_epsilon;} + ///Set the default epsilon value. + static void defaultEpsilon(Value e) {def_epsilon=e;} + + ///\name Comparisons + ///See class Tolerance for more details. + + ///@{ + + ///Returns \c true if \c a is \e surely strictly less than \c b + bool less(Value a,Value b) {return a+_epsilona; } + ///Returns \c true if \c a is \e surely non-zero + Value nonZero(Value a) { return positive(a)||negative(a); }; + + ///@} + + ///Returns zero + static Value zero() {return 0;} + }; + ///Double specialization of \ref Tolerance. ///Double specialization of \ref Tolerance. @@ -133,24 +185,24 @@ static Value zero() {return 0;} }; - ///Float specialization of \ref Tolerance. + ///Long double specialization of \ref Tolerance. - ///Float specialization of \ref Tolerance. + ///Long double specialization of \ref Tolerance. ///\sa Tolerance ///\relates Tolerance template<> - class Tolerance + class Tolerance { - static float def_epsilon; - float _epsilon; + static long double def_epsilon; + long double _epsilon; public: ///\e - typedef float Value; + typedef long double Value; ///Constructor setting the epsilon tolerance to the default value. Tolerance() : _epsilon(def_epsilon) {} ///Constructor setting the epsilon tolerance. - Tolerance(float e) : _epsilon(e) {} + Tolerance(long double e) : _epsilon(e) {} ///Return the epsilon value. Value epsilon() {return _epsilon;}