[PPL-devel] [GIT] ppl/ppl(master): Improved implementation of OR_Matrix<T>:: any_row_iterator<U>::operator+=().
Enea Zaffanella
zaffanella at cs.unipr.it
Sun Feb 26 11:36:11 CET 2012
Module: ppl/ppl
Branch: master
Commit: 756ef076d4574278d3665d3885b7dc41526a2b81
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=756ef076d4574278d3665d3885b7dc41526a2b81
Author: Enea Zaffanella <zaffanella at cs.unipr.it>
Date: Sun Feb 26 11:29:11 2012 +0100
Improved implementation of OR_Matrix<T>::any_row_iterator<U>::operator+=().
Increased readability:
- separated explicit type conversions from code performing arithmetic
operations (on non-mixed typed values);
- added a few redundant parentheses.
Similar improvement applied to a couple of other functions.
Detected by ECLAIR service utypflag.
---
src/Linear_Form.templates.hh | 5 +++--
src/OR_Matrix.inlines.hh | 18 ++++++++++++------
src/checked_float.inlines.hh | 7 ++++---
3 files changed, 19 insertions(+), 11 deletions(-)
diff --git a/src/Linear_Form.templates.hh b/src/Linear_Form.templates.hh
index aa52658..2630f0f 100644
--- a/src/Linear_Form.templates.hh
+++ b/src/Linear_Form.templates.hh
@@ -422,8 +422,9 @@ Linear_Form<C>::relative_error(
C error_propagator;
// We assume that f_base is a power of 2.
- int power = static_cast<int>(msb_position(f_base) * f_mantissa_bits);
- analyzer_format lb = static_cast<analyzer_format>(ldexp(1.0, -power));
+ unsigned int u_power = msb_position(f_base) * f_mantissa_bits;
+ int neg_power = -static_cast<int>(u_power);
+ analyzer_format lb = static_cast<analyzer_format>(ldexp(1.0, neg_power));
error_propagator.build(i_constraint(GREATER_OR_EQUAL, -lb),
i_constraint(LESS_OR_EQUAL, lb));
diff --git a/src/OR_Matrix.inlines.hh b/src/OR_Matrix.inlines.hh
index 7a20e71..a138c01 100644
--- a/src/OR_Matrix.inlines.hh
+++ b/src/OR_Matrix.inlines.hh
@@ -243,14 +243,20 @@ template <typename T>
template <typename U>
inline typename OR_Matrix<T>::template any_row_iterator<U>&
OR_Matrix<T>::any_row_iterator<U>::operator+=(const difference_type m) {
- difference_type increment = m + m * m / 2 + m * static_cast<difference_type>(e);
- if (e % 2 == 0 && m % 2 != 0)
+ difference_type e_dt = static_cast<difference_type>(e);
+ difference_type i_dt = static_cast<difference_type>(i);
+ difference_type increment = m + (m * m / 2) + (m * e_dt);
+ if (e_dt % 2 == 0 && m % 2 != 0)
++increment;
- e = static_cast<dimension_type>(static_cast<difference_type>(e) + m);
- i = static_cast<dimension_type>(static_cast<difference_type>(i) + increment);
+ e_dt += m;
+ i_dt += increment;
+ e = static_cast<dimension_type>(e_dt);
+ i = static_cast<dimension_type>(i_dt);
value.first += increment;
#if PPL_OR_MATRIX_EXTRA_DEBUG
- value.size_ = static_cast<dimension_type>(static_cast<difference_type>(value.size_) + m - m % 2);
+ difference_type value_size_dt = static_cast<difference_type>(value.size_);
+ value_size_dt += (m - m % 2);
+ value.size_ = static_cast<dimension_type>(value_size_dt);
#endif
return *this;
}
@@ -262,7 +268,7 @@ inline typename
Enable_If<(static_cast<Unsigned>(-1) > 0),
typename OR_Matrix<T>::template any_row_iterator<U>& >::type
OR_Matrix<T>::any_row_iterator<U>::operator+=(Unsigned m) {
- dimension_type increment = m + m * m / 2 + m * e;
+ dimension_type increment = m + (m * m / 2) + (m * e);
if (e % 2 == 0 && m % 2 != 0)
++increment;
e += m;
diff --git a/src/checked_float.inlines.hh b/src/checked_float.inlines.hh
index 08b7251..7f261a2 100644
--- a/src/checked_float.inlines.hh
+++ b/src/checked_float.inlines.hh
@@ -880,9 +880,10 @@ assign_float_mpq(T& to, const mpq_class& from, Rounding_Dir dir) {
return set_pos_overflow_float<To_Policy>(to, dir);
}
unsigned int needed_bits = Float<T>::Binary::MANTISSA_BITS + 1;
- if (exponent < Float<T>::Binary::EXPONENT_MIN)
- needed_bits -= static_cast<unsigned int>(Float<T>::Binary::EXPONENT_MIN
- - exponent);
+ if (exponent < Float<T>::Binary::EXPONENT_MIN) {
+ long diff = Float<T>::Binary::EXPONENT_MIN - exponent;
+ needed_bits -= static_cast<unsigned int>(diff);
+ }
mpz_t mantissa;
mpz_init(mantissa);
{
More information about the PPL-devel
mailing list