]> SALOME platform Git repositories - tools/medcoupling.git/commitdiff
Salome HOME
ArcCSegIntersector fix: more precise usage of machine epsilon.
authorabn <adrien.bruneton@cea.fr>
Thu, 7 Jun 2018 07:17:54 +0000 (09:17 +0200)
committerabn <adrien.bruneton@cea.fr>
Thu, 7 Jun 2018 07:17:54 +0000 (09:17 +0200)
src/INTERP_KERNEL/Geometric2D/InterpKernelGeo2DEdgeArcCircle.cxx

index 429cd0cb698226bd493c816c2df38d99b3b4198a..a0b3b9d233f2809b99295e27c0504292667fff7b 100644 (file)
@@ -348,8 +348,8 @@ void ArcCSegIntersector::areOverlappedOrOnlyColinears(const Bounds *whereToFind,
   // Ah ah: we will be taking a square root later. If we want the user to be able to use an epsilon finer than 1.0e-8, then we need
   // to prevent ourselves going below machine precision (typ. 1.0e-16 for double).
   const double eps_machine = std::numeric_limits<double>::epsilon();
-  diff = fabs(diff) < 10*eps_machine ? 0.0 : diff;
-  add  = fabs(add)  < 10*eps_machine ? 0.0 : add;
+  diff = fabs(diff/R) < eps_machine ? 0.0 : diff;
+  add  = fabs(add/R)  < eps_machine ? 0.0 : add;
   double d = add*diff;
   // Compute deltaRoot_div_dr := sqrt(delta)/dr, where delta has the meaning of Wolfram.
   // Then 2*deltaRoot_div_dr is the distance between the two intersection points of the line with the circle. This is what we compare to eps.