private static BigDecimal rootInitialisationNoRounding(
            BigDecimal x,
            BigInteger root,
            int maxite) {
        BigDecimal result;
        int div = 64;
        // Initialise toCompare and previousResult_BigDecimal
        if (x.compareTo(BigDecimal.ONE) == -1) {
            return rootInitialisationLessThanOneNoRounding(
                    x,
                    root,
                    maxite);
        } else {
            int i = 0;
            result = BigDecimal.ONE;
            boolean powerTestAbove = powerTestAboveNoRounding(
                    x,
                    result,
                    root,
                    64);
            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());
            while (i < maxite) {
                // Disect
                c = divideNoRounding(
                        a.subtract(b),
                        rootdiv);
                c = b.add(c);
                powerTestAbove = powerTestAboveNoRounding(
                        x,
                        c,
                        root,
                        div);
                if (powerTestAbove) {
                    a = c;
                } else {
                    b = c;
                    rootdiv = rootdiv.divide(Generic_BigInteger.Two);
                    result = b;
                }
                // Bisect
                c = divideNoRounding(
                        a.subtract(b),
                        TWO);
                c = c.add(b);
                powerTestAbove = powerTestAboveNoRounding(
                        x,
                        c,
                        root,
                        div);
                if (powerTestAbove) {
                    a = c;
                } else {
                    b = c;
                    result = b;
                }
                i++;
            }
        }
        return result;
    }

//    private static BigDecimal rootInitialisation0(
//            BigDecimal x,
//            BigDecimal root_BigDecimal,
//            BigDecimal maxError_BigDecimal,
//            BigDecimal a0,
//            BigDecimal e,
//            Generic_BigDecimal a_Generic_BigDecimal,
//            int decimalPlaces,
//            MathContext a_MathContext,
//            RoundingMode a_RoundingMode) {
//        BigDecimal result;
//        if (x.compareTo(BigDecimal.ONE) == -1) {
//            result = BigDecimal.ONE.subtract(maxError_BigDecimal);
//            // Bisect
//            BigDecimal a = a0;
//            BigDecimal b = result;
//            BigDecimal c;
//            BigDecimal cPowerRoot;
//            boolean notInitialised = true;
//            while (notInitialised) {
//                c = (a.add(b)).divide(TWO, decimalPlaces, a_RoundingMode);
//                cPowerRoot = power(
//                        c,
//                        root_BigDecimal,
//                        e,
//                        a_Generic_BigDecimal,
//                        decimalPlaces,
//                        a_RoundingMode);
//                if (cPowerRoot.compareTo(x) == 1) {
//                    b = c;
//                    if (a.compareTo(c) == 0) {
//                        notInitialised = false;
//                    }
//                } else {
//                    result = c;
//                    notInitialised = false;
//                }
//            }
//        } else {
//            result = BigDecimal.ONE.add(maxError_BigDecimal);
//            BigDecimal a = x.divide(root_BigDecimal, decimalPlaces, a_RoundingMode);
//            if (a.compareTo(BigDecimal.ONE) == 1) {
//                result = BigDecimal.ONE.add(maxError_BigDecimal);
//                // Disect
//                BigDecimal b = a0;
//                BigDecimal c;
//                boolean notInitialised = true;
//                BigDecimal cPowerRoot;
//                while (notInitialised) {
//                    c = (a.add(b)).divide(root_BigDecimal, decimalPlaces, a_RoundingMode);
//                    cPowerRoot = power(
//                            c,
//                            root_BigDecimal,
//                            e,
//                            a_Generic_BigDecimal,
//                            decimalPlaces,
//                            a_RoundingMode);
//                    if (cPowerRoot.compareTo(x) == 1) {
//                        a = c;
//                    } else {
//                        // Bisect
//                        c = (a.add(b)).divide(TWO, decimalPlaces, a_RoundingMode);
//                        cPowerRoot = power(
//                                c,
//                                root_BigDecimal,
//                                e,
//                                a_Generic_BigDecimal,
//                                decimalPlaces,
//                                a_RoundingMode);
//                        if (cPowerRoot.compareTo(x) == 1) {
//                            a = c;
//                        } else {
//                            result = c;
//                            notInitialised = false;
//                        }
//                    }
//                }
//            } else {
//                // Bisect
//                a = x.divide(TWO, decimalPlaces, a_RoundingMode);
//                BigDecimal b = result;
//                BigDecimal c;
//                BigDecimal aAddb;
//                BigDecimal aAddbSubtractTwo;
//                BigDecimal cPowerroot;
//                boolean notInitialised = true;
//                BigDecimal cPowerRoot;
//                while (notInitialised) {
//                    // Disect
//                    aAddb = a.add(b);
//                    aAddbSubtractTwo = aAddb.subtract(TWO);
//                    if (aAddbSubtractTwo.compareTo(BigDecimal.ZERO) != 1) {
//                        notInitialised = false;
//                    } else {
//                        c = (aAddb).divide(aAddbSubtractTwo, decimalPlaces, a_RoundingMode);
//                        cPowerRoot = power(
//                                c,
//                                root_BigDecimal,
//                                e,
//                                a_Generic_BigDecimal,
//                                decimalPlaces,
//                                a_RoundingMode);
//                        if (cPowerRoot.compareTo(x) == 1) {
//                            a = c;
//                        } else {
//                            while (notInitialised) {
//                                // Bisect
//                                a = a.divide(TWO, decimalPlaces, a_RoundingMode);
//                                b = c;
//                                aAddb = a.add(b);
//                                aAddbSubtractTwo = aAddb.subtract(BigDecimal.ONE);
//                                c = (aAddb).divide(aAddbSubtractTwo, decimalPlaces, a_RoundingMode);
//                                cPowerRoot = power(
//                                        c,
//                                        root_BigDecimal,
//                                        e,
//                                        a_Generic_BigDecimal,
//                                        decimalPlaces,
//                                        a_RoundingMode);
//                                if (cPowerRoot.compareTo(x) == 1) {
//                                    a = c;
//                                } else {
//                                    result = c;
//                                    notInitialised = false;
//                                }
//                            }
//                        }
//                    }
//                }
//            }
//        }
//        return result;
//    }