diff --git a/prism/src/explicit/StateValues.java b/prism/src/explicit/StateValues.java index 94bde58e..56663ba4 100644 --- a/prism/src/explicit/StateValues.java +++ b/prism/src/explicit/StateValues.java @@ -139,7 +139,7 @@ public class StateValues implements StateVector valuesI[i] = initI; } else if (type instanceof TypeDouble) { valuesD = new double[size]; - Double objD = ((TypeDouble) type).castValueTo(init); + Double objD = ((TypeDouble) type).castValueTo(init).doubleValue(); double initD = objD.doubleValue(); for (i = 0; i < size; i++) valuesD[i] = initD; diff --git a/prism/src/parser/Values.java b/prism/src/parser/Values.java index 016cba4f..96aa84bb 100644 --- a/prism/src/parser/Values.java +++ b/prism/src/parser/Values.java @@ -28,6 +28,7 @@ package parser; import java.util.ArrayList; +import param.BigRational; import parser.type.Type; import parser.type.TypeBool; import parser.type.TypeDouble; @@ -220,6 +221,7 @@ public class Values implements Cloneable //implements Comparable Object o = values.get(i); if (o instanceof Integer) return TypeInt.getInstance(); if (o instanceof Double) return TypeDouble.getInstance(); + if (o instanceof BigRational) return TypeDouble.getInstance(); if (o instanceof Boolean) return TypeBool.getInstance(); else return null; } diff --git a/prism/src/parser/ast/Expression.java b/prism/src/parser/ast/Expression.java index 6569c666..c72df81e 100644 --- a/prism/src/parser/ast/Expression.java +++ b/prism/src/parser/ast/Expression.java @@ -355,6 +355,9 @@ public abstract class Expression extends ASTElement if (o instanceof Double) { return ((Double) o).doubleValue(); } + if (o instanceof BigRational) { + return ((BigRational)o).doubleValue(); + } if (o instanceof Boolean) { return ((Boolean) o).booleanValue() ? 1.0 : 0.0; } diff --git a/prism/src/parser/type/TypeDouble.java b/prism/src/parser/type/TypeDouble.java index 9e21e4f0..9c775cda 100644 --- a/prism/src/parser/type/TypeDouble.java +++ b/prism/src/parser/type/TypeDouble.java @@ -26,6 +26,7 @@ package parser.type; +import param.BigRational; import prism.PrismLangException; public class TypeDouble extends Type @@ -70,10 +71,12 @@ public class TypeDouble extends Type } @Override - public Double castValueTo(Object value) throws PrismLangException + public Number castValueTo(Object value) throws PrismLangException { if (value instanceof Double) return (Double) value; + if (value instanceof BigRational) + return (BigRational) value; if (value instanceof Integer) return new Double(((Integer) value).intValue()); else