private static void SingleDivide(BigInteger leftSide, BigInteger rightSide, out BigInteger quotient, out BigInteger remainder)
        {
            if (rightSide.IsZero)
            {
                throw new DivideByZeroException();
            }
            DigitsArray digitsArray = new DigitsArray(leftSide.m_digits);

            digitsArray.ResetDataUsed();
            int   dataUsed = digitsArray.DataUsed - 1;
            ulong item     = (ulong)rightSide.m_digits[0];
            ulong num      = (ulong)digitsArray[dataUsed];

            uint[] numArray = new uint[leftSide.m_digits.Count];
            leftSide.m_digits.CopyTo(numArray, 0, (int)numArray.Length);
            int num1 = 0;

            if (num >= item)
            {
                int num2 = num1;
                num1                  = num2 + 1;
                numArray[num2]        = (uint)(num / item);
                digitsArray[dataUsed] = (uint)(num % item);
            }
            dataUsed--;
            while (dataUsed >= 0)
            {
                num = ((ulong)digitsArray[dataUsed + 1] << (DigitsArray.DataSizeBits & 63)) + (ulong)digitsArray[dataUsed];
                int num3 = num1;
                num1                      = num3 + 1;
                numArray[num3]            = (uint)(num / item);
                digitsArray[dataUsed + 1] = 0;
                int num4 = dataUsed;
                dataUsed          = num4 - 1;
                digitsArray[num4] = (uint)(num % item);
            }
            remainder = new BigInteger(digitsArray);
            DigitsArray digitsArray1 = new DigitsArray(num1 + 1, num1);
            int         num5         = 0;
            int         dataUsed1    = digitsArray1.DataUsed - 1;

            while (dataUsed1 >= 0)
            {
                digitsArray1[num5] = numArray[dataUsed1];
                dataUsed1--;
                num5++;
            }
            quotient = new BigInteger(digitsArray1);
        }
        private static void SingleDivide(BigInteger leftSide, BigInteger rightSide, out BigInteger quotient, out BigInteger remainder)
        {
            if (rightSide.IsZero)
            {
                throw new DivideByZeroException();
            }
            DigitsArray digitsArray = new DigitsArray(leftSide.m_digits);

            digitsArray.ResetDataUsed();
            int   i    = digitsArray.DataUsed - 1;
            ulong num  = (ulong)rightSide.m_digits[0];
            ulong num2 = (ulong)digitsArray[i];

            uint[] array = new uint[leftSide.m_digits.Count];
            leftSide.m_digits.CopyTo(array, 0, array.Length);
            int num3 = 0;

            if (num2 >= num)
            {
                array[num3++]  = (uint)(num2 / num);
                digitsArray[i] = (uint)(num2 % num);
            }
            i--;
            while (i >= 0)
            {
                num2               = ((ulong)digitsArray[i + 1] << DigitsArray.DataSizeBits) + (ulong)digitsArray[i];
                array[num3++]      = (uint)(num2 / num);
                digitsArray[i + 1] = 0u;
                digitsArray[i--]   = (uint)(num2 % num);
            }
            remainder = new BigInteger(digitsArray);
            DigitsArray digitsArray2 = new DigitsArray(num3 + 1, num3);
            int         num4         = 0;
            int         j            = digitsArray2.DataUsed - 1;

            while (j >= 0)
            {
                digitsArray2[num4] = array[j];
                j--;
                num4++;
            }
            quotient = new BigInteger(digitsArray2);
        }
 private BigInteger(DigitsArray digits)
 {
     digits.ResetDataUsed();
     this.m_digits = digits;
 }