Exemplo n.º 1
0
        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));
            }
        }
Exemplo n.º 2
0
        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));
            }
        }
Exemplo n.º 3
0
 private void Log(BigInteger a, BigInteger b, BigInteger expected)
 {
     Assert.Equal(MyBigIntImp.ApproximateBigInteger(BigInteger.Log(a, (double)b)), expected);
 }
Exemplo n.º 4
0
 private void Log10(BigInteger a, BigInteger expected)
 {
     Assert.Equal(MyBigIntImp.ApproximateBigInteger(BigInteger.Log10(a)), expected);
 }