00001
00002 #include "tmb_tree/TMBVector3.hpp"
00003 #include <limits>
00004 #include <cmath>
00005
00006
00007 ClassImp(TMBVector3);
00008
00009
00010 bool TMBVector3::is_equal(double x1, double x2)
00011 {
00012 if ( x1 == 0.0 ) return x2 == 0.0;
00013 if ( x2 == 0.0 ) return false;
00014 double eps = std::numeric_limits<double>::epsilon();
00015
00016
00017 double maxdif = 0.7*eps;
00018 double num = x1 - x2;
00019 double den = std::fabs(x1) + std::fabs(x2);
00020 double rat = std::fabs(num/den);
00021 return rat < maxdif;
00022 }
00023
00024
00027 Bool_t TMBVector3::is_equal (const TMBVector3 &v) const
00028 {
00029 return is_equal (v.fX, fX) && is_equal (v.fY, fY) && is_equal (v.fZ, fZ);
00030 }
00031