mirror of https://github.com/CGAL/cgal
Add radius(Interval_nt).
Replace compare_relative_precision() by has_smaller_relative_precision() fixing the case of [-Inf,+Inf].
This commit is contained in:
parent
dcd2ad00ad
commit
a0f9754bbe
|
|
@ -433,10 +433,21 @@ width (const Interval_nt<Protected> & d)
|
||||||
// Non-documented
|
// Non-documented
|
||||||
template <bool Protected>
|
template <bool Protected>
|
||||||
inline
|
inline
|
||||||
Comparison_result
|
double
|
||||||
compare_relative_precision(const Interval_nt<Protected> & d, double prec)
|
radius (const Interval_nt<Protected> & d)
|
||||||
{
|
{
|
||||||
return CGAL::compare(width(d), prec * magnitude(d));
|
return width(d)/2; // This could be improved to avoid overflow.
|
||||||
|
}
|
||||||
|
|
||||||
|
// Non-documented
|
||||||
|
// This is the relative precision of to_double() (the center of the interval),
|
||||||
|
// hence we use radius() instead of width().
|
||||||
|
template <bool Protected>
|
||||||
|
inline
|
||||||
|
bool
|
||||||
|
has_smaller_relative_precision(const Interval_nt<Protected> & d, double prec)
|
||||||
|
{
|
||||||
|
return magnitude(d) == 0 || radius(d) < prec * magnitude(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Non-documented
|
// Non-documented
|
||||||
|
|
@ -446,7 +457,7 @@ relative_precision(const Interval_nt<Protected> & d)
|
||||||
{
|
{
|
||||||
if (magnitude(d) == 0.0)
|
if (magnitude(d) == 0.0)
|
||||||
return 0.0;
|
return 0.0;
|
||||||
return width(d) / magnitude(d);
|
return radius(d) / magnitude(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1078,8 +1078,8 @@ template < typename ET > class Real_embeddable_traits< Lazy_exact_nt<ET> >
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
// If it's precise enough, then OK.
|
// If it's precise enough, then OK.
|
||||||
if (compare_relative_precision(app,
|
if (has_smaller_relative_precision(app,
|
||||||
Lazy_exact_nt<ET>::get_relative_precision_of_to_double()) <= 0)
|
Lazy_exact_nt<ET>::get_relative_precision_of_to_double()))
|
||||||
return CGAL_NTS to_double(app);
|
return CGAL_NTS to_double(app);
|
||||||
|
|
||||||
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
|
CGAL_PROFILER(std::string("failures of : ") + std::string(CGAL_PRETTY_FUNCTION));
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue