int[] res = new int[magnitude.length + val.magnitude.length];
for (int j = y.length - 1; j >= 0; j--) { value += a * (y[j] & IMASK) + (x[i + j + 1] & IMASK);
    public BigInteger multiply(BigInteger val)    {        if (sign == 0 || val.sign == 0)            return BigInteger.ZERO;        int[] res = new int[magnitude.length + val.magnitude.length];        return new BigInteger(sign * val.sign, multiply(res, magnitude, val.magnitude));    }