PPL
1.2
|
A generic Multiplication 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. | |
![]() | |
typedef Linear_Form< FP_Interval_Type > | FP_Linear_Form |
Alias for a linear form with template argument FP_Interval_Type . | |
typedef Box< FP_Interval_Type > | FP_Interval_Abstract_Store |
Alias for a map that associates a variable index to an interval. More... | |
typedef std::map< dimension_type, FP_Linear_Form > | FP_Linear_Form_Abstract_Store |
Alias for a map that associates a variable index to a linear form. More... | |
typedef FP_Interval_Type::boundary_type | boundary_type |
The floating point format used by the analyzer. | |
typedef FP_Interval_Type::info_type | info_type |
The interval policy used by FP_Interval_Type . | |
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. More... | |
void | m_swap (Multiplication_Floating_Point_Expression< FP_Interval_Type, FP_Format > &y) |
Swaps *this with y . | |
Constructors and Destructor | |
Multiplication_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 multiplication floating point expression corresponding to x ![]() y . | |
~Multiplication_Floating_Point_Expression () | |
Destructor. | |
![]() | |
virtual | ~Floating_Point_Expression () |
Destructor. | |
Related Functions | |
(Note that these are not member functions.) | |
template<typename FP_Interval_Type , typename FP_Format > | |
void | swap (Multiplication_Floating_Point_Expression< FP_Interval_Type, FP_Format > &x, Multiplication_Floating_Point_Expression< FP_Interval_Type, FP_Format > &y) |
Swaps x with y . More... | |
template<typename FP_Interval_Type , typename FP_Format > | |
void | swap (Multiplication_Floating_Point_Expression< FP_Interval_Type, FP_Format > &x, Multiplication_Floating_Point_Expression< FP_Interval_Type, FP_Format > &y) |
Additional Inherited Members | |
![]() | |
static bool | overflows (const FP_Linear_Form &lf) |
Verifies if a given linear form overflows. More... | |
static void | relative_error (const FP_Linear_Form &lf, FP_Linear_Form &result) |
Computes the relative error of a given linear form. More... | |
static void | intervalize (const FP_Linear_Form &lf, const FP_Interval_Abstract_Store &store, FP_Interval_Type &result) |
Makes result become an interval that overapproximates all the possible values of lf in the interval abstract store store . More... | |
![]() | |
static FP_Interval_Type | absolute_error = compute_absolute_error() |
Absolute error. More... | |
A generic Multiplication 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 forms such that:
Given an expression and a composite abstract store
, we construct the interval linear form
as follows:
.
Given an expression and a composite abstract store
, we construct the interval linear form
as follows:
Given an expression and a composite abstract store
, we construct the interval linear form
as follows:
where is the linear form computed by calling method
Floating_Point_Expression::relative_error
on ,
is the linear form computed by calling method
Floating_Point_Expression::intervalize
on and
, and
is a rounding error defined in
Floating_Point_Expression::absolute_error
.
Even though we intervalize the first operand in the above example, the actual implementation utilizes an heuristics for choosing which of the two operands must be intervalized in order to obtain the most precise result.
|
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 >.
|
related |
Swaps x
with y
.
|
related |