private BigInteger DoUnaryOperatorSN(BigInteger num1, string op) { switch (op) { case "uSign": return(new BigInteger(num1.Sign)); case "u~": return(~(num1)); case "uLog10": return(MyBigIntImp.ApproximateBigInteger(BigInteger.Log10(num1))); case "uLog": return(MyBigIntImp.ApproximateBigInteger(BigInteger.Log(num1))); case "uAbs": return(BigInteger.Abs(num1)); case "uNegate": return(BigInteger.Negate(num1)); case "u--": return(--(num1)); case "u++": return(++(num1)); case "u-": return(-(num1)); case "u+": return(+(num1)); case "uMultiply": return(BigInteger.Multiply(num1, num1)); case "u*": return(num1 * num1); default: throw new ArgumentException(String.Format("Invalid operation found: {0}", op)); } }
private BigInteger DoBinaryOperatorSN(BigInteger num1, BigInteger num2, string op) { switch (op) { case "bMin": return(BigInteger.Min(num1, num2)); case "bMax": return(BigInteger.Max(num1, num2)); case "b>>": return(num1 >> (int)num2); case "b<<": return(num1 << (int)num2); case "b^": return(num1 ^ num2); case "b|": return(num1 | num2); case "b&": return(num1 & num2); case "b%": return(num1 % num2); case "b/": return(num1 / num2); case "b*": return(num1 * num2); case "b-": return(num1 - num2); case "b+": return(num1 + num2); case "bLog": return(MyBigIntImp.ApproximateBigInteger(BigInteger.Log(num1, (double)num2))); case "bGCD": return(BigInteger.GreatestCommonDivisor(num1, num2)); case "bPow": int arg2 = (int)num2; return(BigInteger.Pow(num1, arg2)); case "bDivRem": BigInteger num3; BigInteger ret = BigInteger.DivRem(num1, num2, out num3); SetSNOutCheck(num3); return(ret); case "bRemainder": return(BigInteger.Remainder(num1, num2)); case "bDivide": return(BigInteger.Divide(num1, num2)); case "bMultiply": return(BigInteger.Multiply(num1, num2)); case "bSubtract": return(BigInteger.Subtract(num1, num2)); case "bAdd": return(BigInteger.Add(num1, num2)); default: throw new ArgumentException(String.Format("Invalid operation found: {0}", op)); } }
private void Log(BigInteger a, BigInteger b, BigInteger expected) { Assert.Equal(MyBigIntImp.ApproximateBigInteger(BigInteger.Log(a, (double)b)), expected); }
private void Log10(BigInteger a, BigInteger expected) { Assert.Equal(MyBigIntImp.ApproximateBigInteger(BigInteger.Log10(a)), expected); }