CGAL::Filtered_exact<CT, ET>


The class Filtered_exact<CT,ET> is a wrapper type for the number type CT, with the difference that all predicates are specialized such that they are guaranteed to be exact. Speed is achieved via a filtering scheme using interval arithmetic (see Section reference). Here are the necessary requirements:

#include <CGAL/Filtered_exact.h>

Is Model for the Concept



The following member functions are used to access the numerical value for the different number types:

CT ntvar.value () returns the wrapped value.

ET ntvar.exact () returns the converted value to ET.

ntvar.interval () returns the converted value to Interval_nt_advanced.

This type actually has additional parameters for experimental features. They will be documented when they will be considered stable, in a next release.


You might use at the beginning of your program a typedef as follows:

    typedef Filtered_exact<double, leda_real> NT;

Or if you are sure that the predicates involved do not use divisions nor square roots:

    typedef Filtered_exact<int, Gmpz> NT;

And if you know that the double variables contain integer values, you can use:

    typedef Filtered_exact<double, Gmpz> NT;

As a general rule, we advise the use of Filtered_exact<double, leda_real>.


The template definition of the low level predicates of CGAL are overloaded for the type Filtered_exact<CT,ET>.

For each predicate file, the overloaded code is generated automatically by the PERL script (scripts/ that you can use for your own predicates. This script parses the template functions and generates the overloaded code the following way:


The low level template predicates of CGAL are in files named CGAL/predicates/kernel_ftC2.h (resp. ftC3), the script is used to produce the files CGAL/Arithmetic_filter/predicates/kernel_ftC2.h (resp. ftC3).

At the moment, only the predicates of the Cartesian and Simple_cartesian kernels are supported, as well as the power tests used by the regular triangulations.