Ejemplo n.º 1
0
        public BigInteger Multiply(
            BigInteger val) {
            if (sign == 0 || val.sign == 0)
                return Zero;

            if (val.QuickPow2Check()) // val is power of two
			{
                BigInteger result = this.ShiftLeft(val.Abs().BitLength - 1);
                return val.sign > 0 ? result : result.Negate();
            }

            if (this.QuickPow2Check()) // this is power of two
			{
                BigInteger result = val.ShiftLeft(this.Abs().BitLength - 1);
                return this.sign > 0 ? result : result.Negate();
            }

            int resLength = (this.BitLength + val.BitLength) / BitsPerInt + 1;
            int[] res = new int[resLength];

            if (val == this) {
                Square(res, this.magnitude);
            }
            else {
                Multiply(res, this.magnitude, val.magnitude);
            }

            return new BigInteger(sign * val.sign, res, true);
        }