private static BigNum EvaluateFunction(Function function, BigNum num) { switch (function) { case Function.Sin: return(BigMath.Sin(num)); case Function.Cos: return(BigMath.Cos(num)); case Function.Tan: return(BigMath.Tan(num)); case Function.Csc: return(BigMath.Csc(num)); case Function.Sec: return(BigMath.Sec(num)); case Function.Cot: return(BigMath.Cot(num)); case Function.Abs: return(BigMath.Abs(num)); case Function.Ceil: return(BigMath.Ceiling(num)); case Function.Floor: return(BigMath.Floor(num)); case Function.Fact: return(BigMath.Gamma(num)); default: throw new ExpressionException("Unknown or invalid function"); } }
private static BigNum Modulo(BigNum x, BigNum y) { // a % b == a - ( b * Floor[a / b] ) if (y == 0) { throw new DivideByZeroException("Divisor y cannot be zero"); } if (x.IsZero) { return(new BigFloat(0)); } BigNum floored = BigMath.Floor(x / y); BigNum multbyb = y * floored; BigNum retval = x - multbyb; return(retval); }