floats.h
00001 #ifndef UTIL_FLOATS_H
00002 #define UTIL_FLOATS_H
00003
00004 namespace util
00005 {
00006 #ifndef VVE_REL_EPSILON
00007
00013 #define VVE_REL_EPSILON 1e-8
00014 #endif
00015
00016 #ifndef VVE_EPSILON
00017
00023 #define VVE_EPSILON 1e-9
00024 #endif
00025
00029 inline bool greater(double v1, double v2, double abs_epsilon = VVE_EPSILON, double rel_epsilon = VVE_REL_EPSILON)
00030 {
00031 return (v1*(1+rel_epsilon/2) + abs_epsilon/2) > (v2*(1-rel_epsilon/2) - abs_epsilon/2);
00032 }
00033
00037 inline bool less(double v1, double v2, double abs_epsilon = VVE_EPSILON, double rel_epsilon = VVE_REL_EPSILON)
00038 {
00039 return greater(v2, v1, abs_epsilon, rel_epsilon);
00040 }
00041
00045 inline bool approx(double v1, double v2, double abs_epsilon = VVE_EPSILON, double rel_epsilon = VVE_REL_EPSILON)
00046 {
00047 double diff = fabs(v1-v2);
00048 if(diff < abs_epsilon) return true;
00049 double tot = fabs(v1)+fabs(v2);
00050 return (diff/tot) < rel_epsilon;
00051 }
00052
00056 inline bool notequal(double v1, double v2, double abs_epsilon = VVE_EPSILON, double rel_epsilon = VVE_REL_EPSILON)
00057 {
00058 return !approx(v1, v2, abs_epsilon, rel_epsilon);
00059 }
00060
00061 }
00062
00063 #endif // UTIL_FLOATS_H
00064