///////////////////////////////////////////////////////////////////////////////////// public bool Visit(VCExprLiteral node, LineariserOptions options) { if (node == VCExpressionGenerator.True) { wr.Write("true"); } else if (node == VCExpressionGenerator.False) { wr.Write("false"); } else if (node is VCExprIntLit) { BigNum lit = ((VCExprIntLit)node).Val; if (lit.IsNegative) { // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols") wr.Write("(- 0 {0})", lit.Abs); } else { wr.Write(lit); } } else if (node is VCExprRealLit) { BigDec lit = ((VCExprRealLit)node).Val; if (lit.IsNegative) { // In SMT2 "-42" is an identifier (SMT2, Sect. 3.2 "Symbols") wr.Write("(- 0.0 {0})", lit.Abs.ToDecimalString()); } else { wr.Write(lit.ToDecimalString()); } } else if (node is VCExprFloatLit) { BigFloat lit = ((VCExprFloatLit)node).Val; wr.Write("(" + lit.ToBVString() + ")"); } else if (node is VCExprRModeLit) { RoundingMode lit = ((VCExprRModeLit)node).Val; wr.Write(lit.ToString()); } else if (node is VCExprStringLit) { String lit = ((VCExprStringLit)node).Val; wr.Write("\"" + lit.ToString() + "\""); } else { Contract.Assert(false); throw new cce.UnreachableException(); } return(true); }
public override string ToString() { return(string.Format(_FCS, "Precision = {0} RoundingMode = {1}", Precision, RoundingMode.ToString())); }
public static decimal Round(this decimal value, int decimalPlaces, RoundingMode mode) { //http://en.wikipedia.org/wiki/Rounding int factor = decimalPlaces.PowerOfTen(); if (mode == RoundingMode.RoundCeiling) { if (value >= 0) { return(RoundUp(value, factor)); } else { return(RoundDown(value, factor)); } } else if (mode == RoundingMode.RoundFloor) { if (value >= 0) { return(RoundDown(value, factor)); } else { return(RoundUp(value, factor)); } } else if (mode == RoundingMode.RoundUp) { return(RoundUp(value, factor)); } else if (mode == RoundingMode.RoundDown) { return(RoundDown(value, factor)); } decimal absolute = value.Abs() * factor; decimal discardedFraction = absolute.FractionaryPart(); if (mode == RoundingMode.RoundHalfUp) { if (discardedFraction >= 0.5M) { return(RoundUp(value, factor)); } else { return(RoundDown(value, factor)); } } else if (mode == RoundingMode.RoundHalfDown) { if (discardedFraction > 0.5M) { return(RoundUp(value, factor)); } else { return(RoundDown(value, factor)); } } else if (mode == RoundingMode.RoundHalfEven) { return(Round(value, decimalPlaces, Decimal.Floor(absolute) % 2 == 0 ? RoundingMode.RoundHalfDown : RoundingMode.RoundHalfUp)); } else if (mode == RoundingMode.RoundHalfOdd) { return(Round(value, decimalPlaces, Decimal.Floor(absolute) % 2 != 0 ? RoundingMode.RoundHalfDown : RoundingMode.RoundHalfUp)); } throw new ArgumentException("Rounding type " + mode.ToString() + " is not recognized"); }