BraintreeEncryption.Library.BouncyCastle.Math.BigInteger.DivideAndRemainder C# (CSharp) Method

DivideAndRemainder() public method

public DivideAndRemainder ( BigInteger val ) : BraintreeEncryption.Library.BouncyCastle.Math.BigInteger[]
val BigInteger
return BraintreeEncryption.Library.BouncyCastle.Math.BigInteger[]
		public BigInteger[] DivideAndRemainder(
			BigInteger val)
		{
			if (val.sign == 0)
				throw new ArithmeticException("Division by zero error");

			BigInteger[] biggies = new BigInteger[2];

			if (sign == 0)
			{
				biggies[0] = Zero;
				biggies[1] = Zero;
			}
			else if (val.QuickPow2Check()) // val is power of two
			{
				int e = val.Abs().BitLength - 1;
				BigInteger quotient = this.Abs().ShiftRight(e);
				int[] remainder = this.LastNBits(e);

				biggies[0] = val.sign == this.sign ? quotient : quotient.Negate();
				biggies[1] = new BigInteger(this.sign, remainder, true);
			}
			else
			{
				int[] remainder = (int[]) this.magnitude.Clone();
				int[] quotient = Divide(remainder, val.magnitude);

				biggies[0] = new BigInteger(this.sign * val.sign, quotient, true);
				biggies[1] = new BigInteger(this.sign, remainder, true);
			}

			return biggies;
		}