public BigInteger subtract(BigInteger val)
private int[] subtract(int xStart, int[] x, int yStart, int[] y)
    public BigInteger subtract(BigInteger val)    {        if (val.sign == 0 || val.magnitude.length == 0)        {            return this;        }        if (sign == 0 || magnitude.length == 0)        {            return val.negate();        }        if (val.sign < 0)        {            if (this.sign > 0)                return this.add(val.negate());        }        else        {            if (this.sign < 0)                return this.add(val.negate());        }        BigInteger bigun,         littlun;        int compare = compareTo(val);        if (compare == 0)        {            return ZERO;        }        if (compare < 0)        {            bigun = val;            littlun = this;        }        else        {            bigun = this;            littlun = val;        }        int res[] = new int[bigun.magnitude.length];        System.arraycopy(bigun.magnitude, 0, res, 0, res.length);        return new BigInteger(this.sign * compare, subtract(0, res, 0, littlun.magnitude));    }