1.1 --- a/lemon/tolerance.h Sat Jan 14 13:42:37 2006 +0000
1.2 +++ b/lemon/tolerance.h Wed Jan 18 09:40:53 2006 +0000
1.3 @@ -44,6 +44,7 @@
1.4 ///
1.5 ///\sa Tolerance<float>
1.6 ///\sa Tolerance<double>
1.7 + ///\sa Tolerance<long double>
1.8 ///\sa Tolerance<int>
1.9 ///\sa Tolerance<long long int>
1.10
1.11 @@ -82,6 +83,57 @@
1.12 };
1.13
1.14
1.15 + ///Float specialization of \ref Tolerance.
1.16 +
1.17 + ///Float specialization of \ref Tolerance.
1.18 + ///\sa Tolerance
1.19 + ///\relates Tolerance
1.20 + template<>
1.21 + class Tolerance<float>
1.22 + {
1.23 + static float def_epsilon;
1.24 + float _epsilon;
1.25 + public:
1.26 + ///\e
1.27 + typedef float Value;
1.28 +
1.29 + ///Constructor setting the epsilon tolerance to the default value.
1.30 + Tolerance() : _epsilon(def_epsilon) {}
1.31 + ///Constructor setting the epsilon tolerance.
1.32 + Tolerance(float e) : _epsilon(e) {}
1.33 +
1.34 + ///Return the epsilon value.
1.35 + Value epsilon() {return _epsilon;}
1.36 + ///Set the epsilon value.
1.37 + void epsilon(Value e) {_epsilon=e;}
1.38 +
1.39 + ///Return the default epsilon value.
1.40 + static Value defaultEpsilon() {return def_epsilon;}
1.41 + ///Set the default epsilon value.
1.42 + static void defaultEpsilon(Value e) {def_epsilon=e;}
1.43 +
1.44 + ///\name Comparisons
1.45 + ///See class Tolerance for more details.
1.46 +
1.47 + ///@{
1.48 +
1.49 + ///Returns \c true if \c a is \e surely strictly less than \c b
1.50 + bool less(Value a,Value b) {return a+_epsilon<b;}
1.51 + ///Returns \c true if \c a is \e surely different from \c b
1.52 + bool different(Value a,Value b) { return less(a,b)||less(b,a); }
1.53 + ///Returns \c true if \c a is \e surely positive
1.54 + bool positive(Value a) { return _epsilon<a; }
1.55 + ///Returns \c true if \c a is \e surely negative
1.56 + bool negative(Value a) { return -_epsilon>a; }
1.57 + ///Returns \c true if \c a is \e surely non-zero
1.58 + Value nonZero(Value a) { return positive(a)||negative(a); };
1.59 +
1.60 + ///@}
1.61 +
1.62 + ///Returns zero
1.63 + static Value zero() {return 0;}
1.64 + };
1.65 +
1.66 ///Double specialization of \ref Tolerance.
1.67
1.68 ///Double specialization of \ref Tolerance.
1.69 @@ -133,24 +185,24 @@
1.70 static Value zero() {return 0;}
1.71 };
1.72
1.73 - ///Float specialization of \ref Tolerance.
1.74 + ///Long double specialization of \ref Tolerance.
1.75
1.76 - ///Float specialization of \ref Tolerance.
1.77 + ///Long double specialization of \ref Tolerance.
1.78 ///\sa Tolerance
1.79 ///\relates Tolerance
1.80 template<>
1.81 - class Tolerance<float>
1.82 + class Tolerance<long double>
1.83 {
1.84 - static float def_epsilon;
1.85 - float _epsilon;
1.86 + static long double def_epsilon;
1.87 + long double _epsilon;
1.88 public:
1.89 ///\e
1.90 - typedef float Value;
1.91 + typedef long double Value;
1.92
1.93 ///Constructor setting the epsilon tolerance to the default value.
1.94 Tolerance() : _epsilon(def_epsilon) {}
1.95 ///Constructor setting the epsilon tolerance.
1.96 - Tolerance(float e) : _epsilon(e) {}
1.97 + Tolerance(long double e) : _epsilon(e) {}
1.98
1.99 ///Return the epsilon value.
1.100 Value epsilon() {return _epsilon;}