diff --git a/prism/src/param/DagFunction.java b/prism/src/param/DagFunction.java index 265f37b0..64ed411a 100644 --- a/prism/src/param/DagFunction.java +++ b/prism/src/param/DagFunction.java @@ -134,7 +134,17 @@ public class DagFunction extends Function { @Override public BigRational asBigRational() { - return dagFactory.asBigRational(this); + switch (type) { + case NORMAL: + return dagFactory.asBigRational(this); + case NAN: + return BigRational.NAN; + case INF: + return BigRational.INF; + case MINF: + return BigRational.MINF; + } + throw new RuntimeException("Illegal type"); } @Override diff --git a/prism/src/param/DagFunctionFactory.java b/prism/src/param/DagFunctionFactory.java index a5fd2999..411f0bde 100644 --- a/prism/src/param/DagFunctionFactory.java +++ b/prism/src/param/DagFunctionFactory.java @@ -221,6 +221,18 @@ class DagFunctionFactory extends FunctionFactory { @Override Function fromBigRational(BigRational bigRat) { + if (bigRat.isSpecial()) { + if (bigRat.isNaN()) { + return getNaN(); + } else if (bigRat.isInf()) { + return getInf(); + } else if (bigRat.isMInf()) { + return getMInf(); + } else { + throw new RuntimeException("Unknown special value"); + } + } + // normal: bigRat = bigRat.cancel(); DagOperator num = new Number(bigRat.getNum()); num = makeUnique(num);