[PPL-devel] [GIT] ppl/ppl(pip): Fixed bug in compatiblity_check().
François Galea
francois.galea at uvsq.fr
Tue Oct 6 11:34:16 CEST 2009
Module: ppl/ppl
Branch: pip
Commit: 0d0b02fa391aeeaac40981792d56abe9e563cef2
URL: http://www.cs.unipr.it/git/gitweb.cgi?p=ppl/ppl.git;a=commit;h=0d0b02fa391aeeaac40981792d56abe9e563cef2
Author: François Galea <francois.galea at uvsq.fr>
Date: Tue Oct 6 10:52:35 2009 +0200
Fixed bug in compatiblity_check().
---
src/PIP_Tree.cc | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/src/PIP_Tree.cc b/src/PIP_Tree.cc
index bb47121..f2866e7 100644
--- a/src/PIP_Tree.cc
+++ b/src/PIP_Tree.cc
@@ -636,7 +636,7 @@ bool
PIP_Solution_Node::compatibility_check(const Matrix &ctx, const Row &cnst) {
Matrix s(ctx);
s.add_row(cnst);
- dimension_type i, j, k, j_;
+ dimension_type i, j, k, j_, j__;
dimension_type num_rows = s.num_rows();
dimension_type num_cols = s.num_columns();
bool result = false;
@@ -664,38 +664,42 @@ PIP_Solution_Node::compatibility_check(const Matrix &ctx, const Row &cnst) {
break;
}
// Perform a pivot operation on the matrix
- const Coefficient &sij = p[j];
+ const Coefficient& sij = p[j];
for (j_=0; j_<num_cols; ++j_) {
if (j_ == j)
continue;
- const Coefficient &sij_ = p[j_];
+ const Coefficient& sij_ = p[j_];
for (k=0; k<num_rows; ++k) {
if (k == i)
continue;
- Coefficient mult = s[k][j] * sij_;
+ Row& row = s[k];
+ Coefficient mult = row[j] * sij_;
if (mult % sij != 0) {
// Must scale row to stay in integer case
Coefficient gcd;
gcd_assign(gcd, mult, sij);
Coefficient scale_factor = sij/gcd;
- add_assign(s[k], s[k], scale_factor);
+ for (j__=0; j__<num_cols; ++j__)
+ row[j__] *= scale_factor;
mult *= scale_factor;
}
- s[k][j_] -= mult / sij;
+ row[j_] -= mult / sij;
}
s[i][j_] = 0;
}
for (k=0; k<num_rows; ++k) {
- Coefficient skj = s[k][j];
+ Row& row = s[k];
+ Coefficient& skj = row[j];
if (skj % sij != 0) {
// as above, we must perform row scaling
Coefficient gcd;
gcd_assign(gcd, skj, sij);
Coefficient scale_factor = sij/gcd;
- add_assign(s[k], s[k], scale_factor);
+ for (j__=0; j__<num_cols; ++j__)
+ row[j__] *= scale_factor;
skj *= scale_factor;
}
- s[k][j] = skj/sij;
+ skj /= sij;
}
}
More information about the PPL-devel
mailing list