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; }