[GIT] ppl/ppl(floating_point): linearize.hh:

Module: ppl/ppl Branch: floating_point Commit: 77104a92691b2a793fa6e522f7f3d959b594417c URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=77104a92691b2...
Author: Fabio Bossi bossi@cs.unipr.it Date: Mon Jul 26 15:45:20 2010 +0200
linearize.hh: - Fixed mistake when accessing type informations.
C_Expr: - Small progress in the implementation.
---
src/linearize.hh | 12 ++++++++---- tests/Concrete_Expression/C_Expr.defs.hh | 27 +++++++++++++++++++++++++++ tests/Concrete_Expression/C_Expr.inlines.hh | 27 +++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-)
diff --git a/src/linearize.hh b/src/linearize.hh index 7883cfa..3bc8f2f 100644 --- a/src/linearize.hh +++ b/src/linearize.hh @@ -117,7 +117,8 @@ add_linearize(const Binary_Operator<Target>& bop_expr, if (!linearize(*(bop_expr.left_hand_side()), int_store, lf_store, result)) return false;
- Floating_Point_Format analyzed_format = bop_expr.floating_point_format(); + Floating_Point_Format analyzed_format = + bop_expr.type().floating_point_format(); FP_Linear_Form rel_error; result.relative_error(analyzed_format, rel_error); result += rel_error; @@ -227,7 +228,8 @@ sub_linearize(const Binary_Operator<Target>& bop_expr, if (!linearize(*(bop_expr.left_hand_side()), int_store, lf_store, result)) return false;
- Floating_Point_Format analyzed_format = bop_expr.floating_point_format(); + Floating_Point_Format analyzed_format = + bop_expr.type().floating_point_format(); FP_Linear_Form rel_error; result.relative_error(analyzed_format, rel_error); result += rel_error; @@ -415,7 +417,8 @@ mul_linearize(const Binary_Operator<Target>& bop_expr,
// Here we do the actual computation. // For optimizing, we store the relative error directly into result. - Floating_Point_Format analyzed_format = bop_expr.floating_point_format(); + Floating_Point_Format analyzed_format = + bop_expr.type().floating_point_format(); if (intervalize_first) { linearized_second_operand.relative_error(analyzed_format, result); linearized_second_operand *= intervalized_first_operand; @@ -558,7 +561,8 @@ div_linearize(const Binary_Operator<Target>& bop_expr, if (!linearize(*(bop_expr.left_hand_side()), int_store, lf_store, result)) return false;
- Floating_Point_Format analyzed_format = bop_expr.floating_point_format(); + Floating_Point_Format analyzed_format = + bop_expr.type().floating_point_format(); FP_Linear_Form rel_error; result.relative_error(analyzed_format, rel_error); result /= intervalized_second_operand; diff --git a/tests/Concrete_Expression/C_Expr.defs.hh b/tests/Concrete_Expression/C_Expr.defs.hh index 41c2053..073e9a8 100644 --- a/tests/Concrete_Expression/C_Expr.defs.hh +++ b/tests/Concrete_Expression/C_Expr.defs.hh @@ -141,6 +141,15 @@ template <> class Cast_Operator<C_Expr> : public Cast_Operator_Base<C_Expr> { public: + //! Do-nothing destructor. + ~Cast_Operator<C_Expr>(); + + //! Returns the type of \p *this. + Concrete_Expression_Type type() const; + + //! Returns the kind of \p *this. + Concrete_Expression_Kind kind() const; + //! Constant identifying cast nodes. enum { KIND = 3 }; }; @@ -149,6 +158,15 @@ template <> class Integer_Constant<C_Expr> : public Integer_Constant_Base<C_Expr> { public: + //! Do-nothing destructor. + ~Integer_Constant<C_Expr>(); + + //! Returns the type of \p *this. + Concrete_Expression_Type type() const; + + //! Returns the kind of \p *this. + Concrete_Expression_Kind kind() const; + //! Constant identifying integer constant nodes. enum { KIND = 4 }; }; @@ -157,6 +175,15 @@ template <> class Floating_Point_Constant<C_Expr> : public Floating_Point_Constant_Base<C_Expr> { public: + //! Do-nothing destructor. + ~Floating_Point_Constant<C_Expr>(); + + //! Returns the type of \p *this. + Concrete_Expression_Type type() const; + + //! Returns the kind of \p *this. + Concrete_Expression_Kind kind() const; + //! Constant identifying floating constant nodes. enum { KIND = 5 }; }; diff --git a/tests/Concrete_Expression/C_Expr.inlines.hh b/tests/Concrete_Expression/C_Expr.inlines.hh index 43acc0e..900e90f 100644 --- a/tests/Concrete_Expression/C_Expr.inlines.hh +++ b/tests/Concrete_Expression/C_Expr.inlines.hh @@ -87,6 +87,33 @@ Unary_Operator<C_Expr>::argument() const { }
inline +Cast_Operator<C_Expr>::~Cast_Operator<C_Expr>() { +} + +inline Concrete_Expression_Kind +Cast_Operator<C_Expr>::kind() const { + return KIND; +} + +inline +Integer_Constant<C_Expr>::~Integer_Constant<C_Expr>() { +} + +inline Concrete_Expression_Kind +Integer_Constant<C_Expr>::kind() const { + return KIND; +} + +inline +Floating_Point_Constant<C_Expr>::~Floating_Point_Constant<C_Expr>() { +} + +inline Concrete_Expression_Kind +Floating_Point_Constant<C_Expr>::kind() const { + return KIND; +} + +inline Approximable_Reference<C_Expr>:: Approximable_Reference(dimension_type var_index) : var_dimension(var_index) {
participants (1)
-
Fabio Bossi