BigComplexMath { public static BigComplex root(BigComplex x, BigDecimal n, MathContext mathContext) { MathContext mc = new MathContext(mathContext.getPrecision() + 4, mathContext.getRoundingMode()); return pow(x, BigDecimal.ONE.divide(n, mc), mc).round(mathContext); }  static BigComplex reciprocal(BigComplex x, MathContext mathContext); static BigComplex conjugate(BigComplex x); static BigDecimal abs(BigComplex x, MathContext mathContext); static BigDecimal absSquare(BigComplex x, MathContext mathContext); static BigDecimal angle(BigComplex x, MathContext mathContext); static BigComplex factorial(BigComplex x, MathContext mathContext); static BigComplex gamma(BigComplex x, MathContext mathContext); static BigComplex exp(BigComplex x, MathContext mathContext); static BigComplex sin(BigComplex x, MathContext mathContext); static BigComplex cos(BigComplex x, MathContext mathContext); static BigComplex tan(BigComplex x, MathContext mathContext); static BigComplex atan(BigComplex x, MathContext mathContext); static BigComplex acot(BigComplex x, MathContext mathContext); static BigComplex asin(BigComplex x, MathContext mathContext); static BigComplex acos(BigComplex x, MathContext mathContext); static BigComplex sqrt(BigComplex x, MathContext mathContext); static BigComplex log(BigComplex x, MathContext mathContext); static BigComplex pow(BigComplex x, long y, MathContext mathContext); static BigComplex pow(BigComplex x, BigDecimal y, MathContext mathContext); static BigComplex pow(BigComplex x, BigComplex y, MathContext mathContext); static BigComplex root(BigComplex x, BigDecimal n, MathContext mathContext); static BigComplex root(BigComplex x, BigComplex n, MathContext mathContext);  }
@Test public void testRoot() { assertPrecisionCalculation( BigComplex.valueOf(new BigDecimal("1.2589858696615772964532950314498058030426856758251923734"), new BigDecimal("0.48693816197569980888611771300161883360684382303096712193")).round(MC), (mc) -> BigComplexMath.root(BigComplex.valueOf(1.1, 2.2), BigDecimal.valueOf(3), mc), 5); }
@Test public void testRootComplex() { assertPrecisionCalculation( BigComplex.valueOf(new BigDecimal("1.4494235461237517229913668192323085954480223365111721042"), new BigDecimal("0.17040446483770403353362509072059809846680452097000085527")).round(MC), (mc) -> BigComplexMath.root(BigComplex.valueOf(1.1, 2.2), BigComplex.valueOf(3, 2), mc), 5); }