[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