diff --git a/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h b/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h index b2fd36247d5..c3250064d85 100644 --- a/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h +++ b/Arrangement_on_surface_2/include/CGAL/Arr_rat_arc/Algebraic_point_2.h @@ -195,8 +195,13 @@ public: typename BFI_traits::Set_precision set_precision; typename BFI_polynomial_traits::Evaluate evaluate; + typedef typename BFI_traits::Bound BFIBound; + typename CGAL::Coercion_traits::Cast to_bound; + + long precision = 16; - Rational error_bound = CGAL::ipower(Rational(1,2),r); + Bound error_bound = CGAL::ipower(Bound(1)/2,r); + while (true) { set_precision(precision); @@ -213,11 +218,13 @@ public: if (CGAL::zero_in(y_denom_bfi) == false) { BFI y_bfi(y_numer_bfi/y_denom_bfi); + if (CGAL::compare(CGAL::width(y_bfi), - Rational(CGAL::lower(CGAL::abs(y_bfi))) * error_bound ) + to_bound(CGAL::lower(CGAL::abs(y_bfi))) * error_bound ) == SMALLER) - return std::make_pair(Bound(CGAL::lower(y_bfi)), - Bound(CGAL::upper(y_bfi))); + return std::make_pair( + to_bound(CGAL::lower(y_bfi)), + to_bound(CGAL::upper(y_bfi))); } else precision*=2; } @@ -258,7 +265,11 @@ private: { typename BFI_traits::Set_precision set_precision; typename BFI_polynomial_traits::Evaluate evaluate; - Rational error_bound = CGAL::ipower(Rational(1,2),a); + + typedef typename BFI_traits::Bound BFIBound; + typename CGAL::Coercion_traits::Cast to_bound; + + Bound error_bound = CGAL::ipower(Bound(1)/2,a); while (true) { set_precision(precision); @@ -273,9 +284,9 @@ private: if (CGAL::zero_in(y_denom_bfi) == false) { BFI y_bfi(y_numer_bfi/y_denom_bfi); - if (Bound(CGAL::width(y_bfi)) < error_bound ) - return std::make_pair(Bound(CGAL::lower(y_bfi)), - Bound(CGAL::upper(y_bfi)) ); + if (to_bound(CGAL::width(y_bfi)) < error_bound ) + return std::make_pair(to_bound(CGAL::lower(y_bfi)), + to_bound(CGAL::upper(y_bfi)) ); } else precision*=2; }