Browse Source

Fixed various possible sources of round-off error when converting doubles to ints/longs (see previous revision).

git-svn-id: https://www.prismmodelchecker.org/svn/prism/prism/trunk@133 bbc10eb1-c90d-0410-af57-cb519fbb1720
master
Dave Parker 20 years ago
parent
commit
7460297a7a
  1. 2
      prism/src/parser/ExpressionConstant.java
  2. 8
      prism/src/prism/NondetModel.java
  3. 2
      prism/src/prism/PrismUtils.java
  4. 6
      prism/src/prism/ProbModel.java
  5. 2
      prism/src/prism/SCCComputer.java
  6. 4
      prism/src/prism/StateListMTBDD.java
  7. 2
      prism/src/prism/StateProbsMTBDD.java
  8. 6
      prism/src/prism/StochModel.java
  9. 2
      prism/src/prism/StochModelChecker.java

2
prism/src/parser/ExpressionConstant.java

@ -214,7 +214,7 @@ public class ExpressionConstant extends Expression
if(o instanceof Double) if(o instanceof Double)
{ {
dval = ((Double)o).doubleValue(); dval = ((Double)o).doubleValue();
ival = (int)dval;
ival = (int)Math.round(dval);
bval = (ival==0) ? false : true; bval = (ival==0) ? false : true;
} }
else if(o instanceof Integer) else if(o instanceof Integer)

8
prism/src/prism/NondetModel.java

@ -113,10 +113,10 @@ public class NondetModel implements Model
// rewards // rewards
public int getNumRewardStructs() { return numRewardStructs; } public int getNumRewardStructs() { return numRewardStructs; }
// stats // stats
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : (long)numStates; }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : (long)numTransitions; }
public long getNumChoices() { return (numChoices>Long.MAX_VALUE) ? -1 : (long)numChoices; }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : (long)numStartStates; }
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : Math.round(numStates); }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : Math.round(numTransitions); }
public long getNumChoices() { return (numChoices>Long.MAX_VALUE) ? -1 : Math.round(numChoices); }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : Math.round(numStartStates); }
// additional methods to get stats as strings // additional methods to get stats as strings
public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); } public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); }
public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); } public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); }

2
prism/src/prism/PrismUtils.java

@ -60,7 +60,7 @@ public class PrismUtils
public static String bigIntToString(double d) public static String bigIntToString(double d)
{ {
if (d <= Long.MAX_VALUE) { if (d <= Long.MAX_VALUE) {
return "" + (long)d;
return "" + Math.round(d);
} }
else { else {
return "" + d; return "" + d;

6
prism/src/prism/ProbModel.java

@ -108,9 +108,9 @@ public class ProbModel implements Model
// rewards // rewards
public int getNumRewardStructs() { return numRewardStructs; } public int getNumRewardStructs() { return numRewardStructs; }
// stats // stats
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : (long)numStates; }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : (long)numTransitions; }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : (long)numStartStates; }
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : Math.round(numStates); }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : Math.round(numTransitions); }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : Math.round(numStartStates); }
// additional methods to get stats as strings // additional methods to get stats as strings
public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); } public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); }
public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); } public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); }

2
prism/src/prism/SCCComputer.java

@ -139,7 +139,7 @@ public class SCCComputer
// } // }
// mainLog.print("States not in BSCCs:\nx: "); // mainLog.print("States not in BSCCs:\nx: ");
// JDD.PrintVector(notInBSCCs, allDDRowVars); // JDD.PrintVector(notInBSCCs, allDDRowVars);
mainLog.println(" Transient states: " + (int)JDD.GetNumMinterms(notInBSCCs, allDDRowVars.n()));
mainLog.println(" Transient states: " + JDD.GetNumMintermsString(notInBSCCs, allDDRowVars.n()));
} }
// pick a random (actually the first) state from set (set not empty) // pick a random (actually the first) state from set (set not empty)

4
prism/src/prism/StateListMTBDD.java

@ -89,12 +89,12 @@ public class StateListMTBDD implements StateList
public int size() public int size()
{ {
return (size > Integer.MAX_VALUE) ? -1 : (int)size;
return (size > Integer.MAX_VALUE) ? -1 : (int)Math.round(size);
} }
public String sizeString() public String sizeString()
{ {
return (size > Long.MAX_VALUE) ? "" + size : "" + (long)size;
return (size > Long.MAX_VALUE) ? "" + size : "" + Math.round(size);
} }
// print whole list // print whole list

2
prism/src/prism/StateProbsMTBDD.java

@ -138,7 +138,7 @@ public class StateProbsMTBDD implements StateProbs
public int getNNZ() public int getNNZ()
{ {
double nnz = JDD.GetNumMinterms(probs, numDDRowVars); double nnz = JDD.GetNumMinterms(probs, numDDRowVars);
return (nnz > Integer.MAX_VALUE) ? -1 : (int)nnz;
return (nnz > Integer.MAX_VALUE) ? -1 : (int)Math.round(nnz);
} }
public String getNNZString() public String getNNZString()

6
prism/src/prism/StochModel.java

@ -108,9 +108,9 @@ public class StochModel implements Model
// rewards // rewards
public int getNumRewardStructs() { return numRewardStructs; } public int getNumRewardStructs() { return numRewardStructs; }
// stats // stats
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : (long)numStates; }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : (long)numTransitions; }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : (long)numStartStates; }
public long getNumStates() { return (numStates>Long.MAX_VALUE) ? -1 : Math.round(numStates); }
public long getNumTransitions() { return (numTransitions>Long.MAX_VALUE) ? -1 : Math.round(numTransitions); }
public long getNumStartStates() { return (numStartStates>Long.MAX_VALUE) ? -1 : Math.round(numStartStates); }
// additional methods to get stats as strings // additional methods to get stats as strings
public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); } public String getNumStatesString() { return PrismUtils.bigIntToString(numStates); }
public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); } public String getNumTransitionsString() { return PrismUtils.bigIntToString(numTransitions); }

2
prism/src/prism/StochModelChecker.java

@ -2436,7 +2436,7 @@ public class StochModelChecker implements ModelChecker
// avoid a call to GetNumMinterms in this simple (and common) case // avoid a call to GetNumMinterms in this simple (and common) case
n = numStates; n = numStates;
} else { } else {
n = (long)JDD.GetNumMinterms(subset, allDDRowVars.n());
n = Math.round(JDD.GetNumMinterms(subset, allDDRowVars.n()));
} }
// special case - there is only one state in 'subset' // special case - there is only one state in 'subset'

Loading…
Cancel
Save