private static BigDecimal rootInitialisation(
            BigDecimal x,
            BigInteger root,
            BigDecimal epsilon_BigDecimal,
            int maxite,
            int decimalPlaces,
            RoundingMode a_RoundingMode) {
        BigDecimal result;
        int div = 64;
        // Initialise toCompare and previousResult_BigDecimal
        if (x.compareTo(BigDecimal.ONE) == -1) {
            return rootInitialisationLessThanOne(
                    x,
                    root,
                    epsilon_BigDecimal,
                    maxite,
                    decimalPlaces,
                    a_RoundingMode);
        } else {
            int i = 0;
            result = BigDecimal.ONE.add(epsilon_BigDecimal);
            boolean powerTestAbove = powerTestAbove(
                    x,
                    result,
                    root,
                    64,
                    decimalPlaces,
                    a_RoundingMode);
            if (powerTestAbove) {
                // Root cannot be found within current precision...
                int debug = 1;
                return BigDecimal.ONE;
            }
            BigDecimal a = new BigDecimal(x.toString());
            BigDecimal b = BigDecimal.ONE;
            BigDecimal c;

            BigInteger rootdiv = new BigInteger(root.toString());
            //boolean notInitialised = true;
            //BigDecimal difference_BigDecimal;
//            while (i < maxite && notInitialised) {
            while (i < maxite) {
//                difference_BigDecimal = a.subtract(b);
//                if (difference_BigDecimal.compareTo(epsilon_BigDecimal) == -1) {
//                    notInitialised = false;
//                }
//                if (notInitialised) {
                // Disect
                c = divideRoundIfNecessary(
                        a.subtract(b),
                        rootdiv,
                        decimalPlaces + 1,
                        a_RoundingMode);
                c = b.add(c);
                powerTestAbove = powerTestAbove(
                        x,
                        c,
                        root,
                        div,
                        decimalPlaces,
                        a_RoundingMode);
                if (powerTestAbove) {
                    a = c;
                    //a = new BigDecimal(c.toString());
                } else {
                    b = c;
                    //b = new BigDecimal(c.toString());
                    rootdiv = rootdiv.divide(Generic_BigInteger.Two);
                    result = b;
//                        difference_BigDecimal = (result.subtract(c)).abs();
//                        if (difference_BigDecimal.compareTo(epsilon_BigDecimal) == -1) {
//                            notInitialised = false;
//                        }
                }
//                if (notInitialised) {
                // Bisect
                c = divideRoundIfNecessary(
                        a.subtract(b),
                        TWO,
                        decimalPlaces + 1,
                        a_RoundingMode);
                c = c.add(b);
                powerTestAbove = powerTestAbove(
                        x,
                        c,
                        root,
                        div,
                        decimalPlaces,
                        a_RoundingMode);
                if (powerTestAbove) {
                    a = c;
                    //a = new BigDecimal(c.toString());
                } else {
                    b = c;
                    //b = new BigDecimal(c.toString());
                    result = b;
//                            difference_BigDecimal = (result.subtract(c)).abs();
//                            if (difference_BigDecimal.compareTo(epsilon_BigDecimal) == -1) {
//                                notInitialised = false;
//                            }
                }
//                }
//                }
                i++;
            }
        }