GetInteger() public method

public GetInteger ( int sign ) : System.Numerics.BigInteger
sign int
return System.Numerics.BigInteger
コード例 #1
0
        /// <summary>Adds the values of two specified <see cref="BigInteger" /> objects.</summary>
        /// <returns>The sum of <paramref name="left" /> and <paramref name="right" />.</returns>
        /// <param name="left">The first value to add.</param>
        /// <param name="right">The second value to add.</param>
        public static BigInteger operator +(BigInteger left, BigInteger right)
        {
            if (right.IsZero)
            {
                return(left);
            }

            if (left.IsZero)
            {
                return(right);
            }

            var signLeft  = 1;
            var signRight = 1;
            var regLeft   = new BigIntegerBuilder(left, ref signLeft);
            var regRight  = new BigIntegerBuilder(right, ref signRight);

            if (signLeft != signRight)
            {
                regLeft.Sub(ref signLeft, ref regRight);
            }
            else
            {
                regLeft.Add(ref regRight);
            }

            return(regLeft.GetInteger(signLeft));
        }
コード例 #2
0
        /// <summary>
        ///     Subtracts a <see cref="BigInteger" /> value from another
        ///     <see cref="BigInteger" /> value.
        /// </summary>
        /// <returns>The result of subtracting <paramref name="right" /> from <paramref name="left" />.</returns>
        /// <param name="left">The value to subtract from (the minuend).</param>
        /// <param name="right">The value to subtract (the subtrahend).</param>
        public static BigInteger operator -(BigInteger left, BigInteger right)
        {
            if (right.IsZero)
            {
                return(left);
            }

            if (left.IsZero)
            {
                return(-right);
            }

            var leftSign  = 1;
            var rightSign = -1;
            var regLeft   = new BigIntegerBuilder(left, ref leftSign);
            var regRight  = new BigIntegerBuilder(right, ref rightSign);

            if (leftSign != rightSign)
            {
                regLeft.Sub(ref leftSign, ref regRight);
            }
            else
            {
                regLeft.Add(ref regRight);
            }

            return(regLeft.GetInteger(leftSign));
        }
コード例 #3
0
        /// <summary>
        ///     Divides a specified <see cref="BigInteger" /> value by another specified
        ///     <see cref="BigInteger" /> value by using integer division.
        /// </summary>
        /// <returns>The integral result of the division.</returns>
        /// <param name="dividend">The value to be divided.</param>
        /// <param name="divisor">The value to divide by.</param>
        /// <exception cref="DivideByZeroException">
        ///     <paramref name="divisor" /> is 0 (zero).
        /// </exception>
        public static BigInteger operator /(BigInteger dividend, BigInteger divisor)
        {
            var sign   = 1;
            var regNum = new BigIntegerBuilder(dividend, ref sign);
            var regDen = new BigIntegerBuilder(divisor, ref sign);

            regNum.Div(ref regDen);
            return(regNum.GetInteger(sign));
        }
コード例 #4
0
        /// <summary>Multiplies two specified <see cref="BigInteger" /> values.</summary>
        /// <returns>The product of <paramref name="left" /> and <paramref name="right" />.</returns>
        /// <param name="left">The first value to multiply.</param>
        /// <param name="right">The second value to multiply.</param>
        public static BigInteger operator *(BigInteger left, BigInteger right)
        {
            var sign     = 1;
            var regLeft  = new BigIntegerBuilder(left, ref sign);
            var regRight = new BigIntegerBuilder(right, ref sign);

            regLeft.Mul(ref regRight);
            return(regLeft.GetInteger(sign));
        }
コード例 #5
0
        /// <summary>
        ///     Returns the remainder that results from division with two specified
        ///     <see cref="BigInteger" /> values.
        /// </summary>
        /// <returns>The remainder that results from the division.</returns>
        /// <param name="dividend">The value to be divided.</param>
        /// <param name="divisor">The value to divide by.</param>
        /// <exception cref="DivideByZeroException">
        ///     <paramref name="divisor" /> is 0 (zero).
        /// </exception>
        public static BigInteger operator %(BigInteger dividend, BigInteger divisor)
        {
            var signNUm = 1;
            var signDen = 1;
            var regNum  = new BigIntegerBuilder(dividend, ref signNUm);
            var regDen  = new BigIntegerBuilder(divisor, ref signDen);

            regNum.Mod(ref regDen);
            return(regNum.GetInteger(signNUm));
        }