PPL 0.12
|
A generic Difference Floating Point Expression. More...
#include <ppl.hh>
Public Types | |
typedef Floating_Point_Expression < FP_Interval_Type, FP_Format > ::FP_Linear_Form | FP_Linear_Form |
Alias for the Linear_Form<FP_Interval_Type> from Floating_Point_Expression. | |
typedef Floating_Point_Expression < FP_Interval_Type, FP_Format > ::FP_Interval_Abstract_Store | FP_Interval_Abstract_Store |
Alias for the Box<FP_Interval_Type> from Floating_Point_Expression. | |
typedef Floating_Point_Expression < FP_Interval_Type, FP_Format > ::FP_Linear_Form_Abstract_Store | FP_Linear_Form_Abstract_Store |
Alias for the std::map<dimension_type, FP_Linear_Form> from Floating_Point_Expression. | |
typedef Floating_Point_Expression < FP_Interval_Type, FP_Format > ::boundary_type | boundary_type |
Alias for the FP_Interval_Type::boundary_type from Floating_Point_Expression. | |
typedef Floating_Point_Expression < FP_Interval_Type, FP_Format > ::info_type | info_type |
Alias for the FP_Interval_Type::info_type from Floating_Point_Expression. | |
Public Member Functions | |
bool | linearize (const FP_Interval_Abstract_Store &int_store, const FP_Linear_Form_Abstract_Store &lf_store, FP_Linear_Form &result) const |
Linearizes the expression in a given astract store. | |
void | m_swap (Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format > &y) |
Swaps *this with y . | |
Constructors and Destructor | |
Difference_Floating_Point_Expression (Floating_Point_Expression< FP_Interval_Type, FP_Format > *const x, Floating_Point_Expression< FP_Interval_Type, FP_Format > *const y) | |
Constructor with two parameters: builds the difference floating point expression corresponding to x ![]() y . | |
~Difference_Floating_Point_Expression () | |
Destructor. | |
Related Functions | |
(Note that these are not member functions.) | |
template<typename FP_Interval_Type , typename FP_Format > | |
void | swap (Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format > &x, Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format > &y) |
Swaps x with y . |
A generic Difference Floating Point Expression.
FP_Interval_Type
represents the type of the intervals used in the abstract domain.FP_Format
represents the floating point format used in the concrete domain.Let and
be two linear forms,
and
two sound abstract operators on linear form such that:
Given an expression and a composite abstract store
, we construct the interval linear form
on
as follows:
where is the linear form computed by calling method
Floating_Point_Expression::relative_error
on and
is a rounding error defined in
Floating_Point_Expression::absolute_error
.
bool Parma_Polyhedra_Library::Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format >::linearize | ( | const FP_Interval_Abstract_Store & | int_store, |
const FP_Linear_Form_Abstract_Store & | lf_store, | ||
FP_Linear_Form & | result | ||
) | const [virtual] |
Linearizes the expression in a given astract store.
Makes result
become the linearization of *this
in the given composite abstract store.
int_store | The interval abstract store. |
lf_store | The linear form abstract store. |
result | The modified linear form. |
true
if the linearization succeeded, false
otherwise.Note that all variables occuring in the expressions represented by first_operand
and second_operand
MUST have an associated value in int_store
. If this precondition is not met, calling the method causes an undefined behavior.
See the class description for a detailed explanation of how result
is computed.
Implements Parma_Polyhedra_Library::Floating_Point_Expression< FP_Interval_Type, FP_Format >.
void swap | ( | Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format > & | x, |
Difference_Floating_Point_Expression< FP_Interval_Type, FP_Format > & | y | ||
) | [related] |
Swaps x
with y
.