[Lemon-commits] [lemon_svn] alpar: r2472 - hugo/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Mon Nov 6 20:52:55 CET 2006
Author: alpar
Date: Wed Jan 18 10:40:53 2006
New Revision: 2472
Modified:
hugo/trunk/lemon/base.cc
hugo/trunk/lemon/tolerance.h
Log:
Tolerance<long double> added
Modified: hugo/trunk/lemon/base.cc
==============================================================================
--- hugo/trunk/lemon/base.cc (original)
+++ hugo/trunk/lemon/base.cc Wed Jan 18 10:40:53 2006
@@ -21,8 +21,9 @@
#include<lemon/invalid.h>
namespace lemon {
- double Tolerance<double>::def_epsilon = 1e-10;
float Tolerance<float>::def_epsilon = 1e-4;
+ double Tolerance<double>::def_epsilon = 1e-10;
+ long double Tolerance<long double>::def_epsilon = 1e-14;
#ifndef LEMON_ONLY_TEMPLATES
const Invalid INVALID = Invalid();
Modified: hugo/trunk/lemon/tolerance.h
==============================================================================
--- hugo/trunk/lemon/tolerance.h (original)
+++ hugo/trunk/lemon/tolerance.h Wed Jan 18 10:40:53 2006
@@ -44,6 +44,7 @@
///
///\sa Tolerance<float>
///\sa Tolerance<double>
+ ///\sa Tolerance<long double>
///\sa Tolerance<int>
///\sa Tolerance<long long int>
@@ -82,6 +83,57 @@
};
+ ///Float specialization of \ref Tolerance.
+
+ ///Float specialization of \ref Tolerance.
+ ///\sa Tolerance
+ ///\relates Tolerance
+ template<>
+ class Tolerance<float>
+ {
+ 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+_epsilon<b;}
+ ///Returns \c true if \c a is \e surely different from \c b
+ bool different(Value a,Value b) { return less(a,b)||less(b,a); }
+ ///Returns \c true if \c a is \e surely positive
+ bool positive(Value a) { return _epsilon<a; }
+ ///Returns \c true if \c a is \e surely negative
+ bool negative(Value a) { return -_epsilon>a; }
+ ///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<float>
+ class Tolerance<long double>
{
- 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;}
More information about the Lemon-commits
mailing list