stats: fix rounding issues
Fixes #582. * spot/twaalgos/stats.cc: Add 0.5 to the result of bdd_satcountset() before truncating it. * NEWS: Mention the bug.
This commit is contained in:
parent
2bd2abd4c9
commit
913e807d66
2 changed files with 15 additions and 3 deletions
3
NEWS
3
NEWS
|
|
@ -325,6 +325,9 @@ New in spot 2.11.6.dev (not yet released)
|
||||||
- The configure script failed to detect the include path for Python 3.12.
|
- The configure script failed to detect the include path for Python 3.12.
|
||||||
(Issue #577.)
|
(Issue #577.)
|
||||||
|
|
||||||
|
- Work around many failures caused by incorrect rounding of floating
|
||||||
|
point values in the counting of transitions. (Issue #582)
|
||||||
|
|
||||||
- Some incorrectly escaped strings in Python code were causing
|
- Some incorrectly escaped strings in Python code were causing
|
||||||
warnings with Python 3.12.
|
warnings with Python 3.12.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,10 @@ namespace spot
|
||||||
unsigned long long tr = 0;
|
unsigned long long tr = 0;
|
||||||
bdd v = g->ap_vars();
|
bdd v = g->ap_vars();
|
||||||
for (auto& e: g->edges())
|
for (auto& e: g->edges())
|
||||||
tr += bdd_satcountset(e.cond, v);
|
// We add 0.5 to work around rounding errors in the computation
|
||||||
|
// of bdd_satcountset(), as the conversion is done by
|
||||||
|
// truncation. See issue #582.
|
||||||
|
tr += 0.5 + bdd_satcountset(e.cond, v);
|
||||||
return tr;
|
return tr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -79,7 +82,10 @@ namespace spot
|
||||||
const twa_succ_iterator* it) override
|
const twa_succ_iterator* it) override
|
||||||
{
|
{
|
||||||
++s_.edges;
|
++s_.edges;
|
||||||
s_.transitions += bdd_satcountset(it->cond(), apvars_);
|
// We add 0.5 to work around rounding errors in the
|
||||||
|
// computation of bdd_satcountset(), as the conversion is done
|
||||||
|
// by truncation. See issue #582.
|
||||||
|
s_.transitions += 0.5 + bdd_satcountset(it->cond(), apvars_);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
@ -182,7 +188,10 @@ namespace spot
|
||||||
[&s, &ge](bdd cond)
|
[&s, &ge](bdd cond)
|
||||||
{
|
{
|
||||||
++s.edges;
|
++s.edges;
|
||||||
s.transitions += bdd_satcountset(cond, ge->ap_vars());
|
// We add 0.5 to work around rounding errors in the
|
||||||
|
// computation of bdd_satcountset(), as the conversion
|
||||||
|
// is done by truncation. See issue #582.
|
||||||
|
s.transitions += 0.5 + bdd_satcountset(cond, ge->ap_vars());
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue