00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef CE_STABLECOMPARISON
00020 #define CE_STABLECOMPARISON
00021
00022 #include <cmath>
00023
00024 #define STABLE_COMP_TOL 1e-5
00025
00026 namespace Avogadro {
00027 namespace StableComp {
00028
00029 inline bool lt(double v1,
00030 double v2,
00031 double prec =
00032 STABLE_COMP_TOL)
00033 {
00034 return ( v1 < (v2 - prec) );
00035 }
00036
00037 inline bool gt(double v1,
00038 double v2,
00039 double prec =
00040 STABLE_COMP_TOL)
00041 {
00042 return ( v2 < (v1 - prec) );
00043 }
00044
00045 inline bool eq(double v1,
00046 double v2,
00047 double prec =
00048 STABLE_COMP_TOL)
00049 {
00050 return (!(lt(v1,v2,prec) ||
00051 gt(v1,v2,prec) ) );
00052 }
00053
00054 inline bool neq(double v1,
00055 double v2,
00056 double prec =
00057 STABLE_COMP_TOL)
00058 {
00059 return (!(eq(v1,v2,prec)));
00060 }
00061
00062 inline bool leq(double v1,
00063 double v2,
00064 double prec =
00065 STABLE_COMP_TOL)
00066 {
00067 return (!gt(v1, v2, prec));
00068 }
00069
00070 inline bool geq(double v1,
00071 double v2,
00072 double prec =
00073 STABLE_COMP_TOL)
00074 {
00075 return (!lt(v1, v2, prec));
00076 }
00077
00078 inline double sign(double v)
00079 {
00080
00081 if (v >= 0) return 1.0;
00082 else return -1.0;
00083 }
00084
00085 inline double round(double v,
00086 int dec)
00087 {
00088 const double shift = pow(10.0,dec);
00089 const double shifted = v * shift;
00090 return floor(shifted+0.5) / shift;
00091 }
00092 }
00093 }
00094
00095 #endif