CGAL::Filtered_exact<CT, ET>

Definition

NOTE : The functionality provided by Filtered_exact<CT,ET> is superseeded by Filtered_kernel, hence the use of Filtered_exact<CT,ET> is deprecated. We recommend that users update their code as soon as possible, as we may not guarantee proper functionning of Filtered_exact<CT,ET> in the future.

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 44.10). Here are the necessary requirements:

#include <CGAL/Filtered_exact.h>

Is Model for the Concepts

FieldNumberType

Operations

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.

Interval_nt_advanced
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.

Example

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

    #include<CGAL/Filtered_exact.h>
    #include<CGAL/leda_real.h>
    #include<CGAL/double.h>
    typedef Filtered_exact<double, leda_real> NT;

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

    #include<CGAL/Filtered_exact.h>
    #include<CGAL/Gmpz.h>
    #include<CGAL/int.h>
    typedef Filtered_exact<int, Gmpz> NT;

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

    #include<CGAL/Filtered_exact.h>
    #include<CGAL/Gmpz.h>
    #include<CGAL/double.h>
    typedef Filtered_exact<double, Gmpz> NT;

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

Implementation

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/cgal_filtered_predicates_generator.pl) that you can use for your own predicates. This script parses the template functions and generates the overloaded code the following way:

Example

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.