* @param y
     * @param div
     * @return
     */
    public static BigDecimal powerNoRounding(
            BigDecimal x,
            BigInteger y,
            int div) {
        // Deal with special cases
        // x = 0
        if (x.compareTo(BigDecimal.ZERO) == 0) {
            return BigDecimal.ZERO;
        }
        // x = 1
        if (x.compareTo(BigDecimal.ONE) == 0) {
            return BigDecimal.ONE;
        }
        // y = 0
        if (y.compareTo(BigInteger.ZERO) == 0) {
            return BigDecimal.ONE;
        }
        // y = 1
        if (y.compareTo(BigInteger.ONE) == 0) {
            return new BigDecimal(x.toString());
        }
        // y = 2
        if (y.compareTo(Generic_BigInteger.Two) == 0) {
            BigDecimal result = x.multiply(x);
            return result;
        }
        // x < 0
        if (x.compareTo(BigDecimal.ZERO) == -1) {
            BigDecimal result = powerNoRounding(
                    x.negate(),
                    y,
                    div);
            if (Generic_BigInteger.isEven(y)) {
                return result.negate();
                //return round(result.negate(), decimalPlaces, a_RoundingMode);
            } else {
                return result;
                //return round(result, decimalPlaces, a_RoundingMode);
            }
        }
        // y < 0
        if (y.compareTo(BigInteger.ZERO) == -1) {
            BigDecimal power = powerNoSpecialCaseCheckNoRounding(
                    x,
                    y.negate(),
                    div);
            BigDecimal result = new BigDecimal(
                    reciprocalWillBeIntegerReturnBigInteger(power));
            return result;
            //return round(result, decimalPlaces, a_RoundingMode);
        }
        BigDecimal result = powerNoSpecialCaseCheckNoRounding(
                x,
                y,
                div);
        return result;
    }