[GIT] ppl/ppl(sparse_matrices): PIP_Solution_Node: optimize solve() method for sparse matrices.

Module: ppl/ppl Branch: sparse_matrices Commit: b5918be076131cafc2ae20474a451b125aa0288a URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=b5918be076131...
Author: Marco Poletti poletti.marco@gmail.com Date: Fri Mar 19 09:24:39 2010 +0100
PIP_Solution_Node: optimize solve() method for sparse matrices.
---
src/PIP_Tree.cc | 8 ++++++-- 1 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc index 1339d3e..1ebbaba 100644 --- a/src/PIP_Tree.cc +++ b/src/PIP_Tree.cc @@ -2765,7 +2765,7 @@ PIP_Solution_Node::solve(const PIP_Problem& pip, if (s_pivot_pj != pivot_den) { for (dimension_type i = num_rows; i-- > 0; ) { matrix_row_reference_type s_i = tableau.s[i]; - product = s_i[pj] * pivot_den; + product = s_i.get(pj) * pivot_den; if (product % s_pivot_pj != 0) { // As above, perform matrix scaling. gcd_assign(gcd, product, s_pivot_pj); @@ -2774,7 +2774,11 @@ PIP_Solution_Node::solve(const PIP_Problem& pip, product *= scale_factor; } PPL_ASSERT(product % s_pivot_pj == 0); - exact_div_assign(s_i[pj], product, s_pivot_pj); + if (product != 0 || s_i.get(pj) != 0) { + Coefficient x = Coefficient_zero(); + exact_div_assign(x, product, s_pivot_pj); + s_i[pj] = x; + } } }
participants (1)
-
Marco Poletti