25 #ifndef PPL_Floating_Point_Expression_templates_hh
26 #define PPL_Floating_Point_Expression_templates_hh 1
31 namespace Parma_Polyhedra_Library {
33 template<
typename FP_Interval_Type,
typename FP_Format>
38 FP_Interval_Type error_propagator;
47 assert(current_term->is_bounded());
50 current_multiplier(std::max(std::abs(current_term->lower()),
51 std::abs(current_term->upper())));
53 current_result_term *= error_propagator;
60 assert(current_term->is_bounded());
62 = FP_Interval_Type(std::max(std::abs(current_term->lower()),
63 std::abs(current_term->upper())));
65 current_result_term *= current_multiplier;
66 current_result_term *= error_propagator;
67 result += current_result_term;
73 template<
typename FP_Interval_Type,
typename FP_Format>
78 FP_Interval_Type& result) {
85 current_addend *= curr_int;
86 result += current_addend;
92 template<
typename FP_Interval_Type,
typename FP_Format>
99 omega = std::max(pow(static_cast<Boundary>(FP_Format::BASE),
100 static_cast<Boundary>(1 - FP_Format::EXPONENT_BIAS
101 - FP_Format::MANTISSA_BITS)),
102 std::numeric_limits<Boundary>::denorm_min());
103 FP_Interval_Type result;
111 #endif // !defined(PPL_Floating_Point_Expression_templates_hh)