On Sun, 27 Jul 2025 07:56:59 GMT, fabioromano1 <d...@openjdk.org> wrote:

>> This PR implements nth root computation for BigIntegers using Newton method.
>
> fabioromano1 has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   A zero root's shift can't be excluded

src/java.base/share/classes/java/math/BigInteger.java line 2773:

> 2771:      */
> 2772:     public BigInteger nthRoot(int n) {
> 2773:         return n == 1 ? this : (n == 2 ? sqrt() : 
> nthRootAndRemainder(n, false)[0]);

I'm not a reviewer, but I noticed that inlining the `needRemainder`-flag into 
the callers arguably yields clearer flow, obviates the "Assume n != 1 && n != 
2" javadoc and removes the array allocation for `nthRoot`:


    public BigInteger nthRoot(int n) {
        if (n == 1)
            return this;

        if (n == 2)
            return sqrt();

        checkNthRoot(n);
        MutableBigInteger[] rootRem = new 
MutableBigInteger(this.mag).nthRootRem(n);
        return rootRem[0].toBigInteger(signum);
    }

    public BigInteger[] nthRootAndRemainder(int n) {
        if (n == 1)
            return new BigInteger[] { this, ZERO };

        if (n == 2)
            return sqrtAndRemainder();

        checkNthRoot(n);
        MutableBigInteger[] rootRem = new 
MutableBigInteger(this.mag).nthRootRem(n);
        return new BigInteger[] {
                rootRem[0].toBigInteger(signum),
                rootRem[1].toBigInteger(signum)
        };
    }

    private static void checkNthRoot(int n) {
        if (n <= 0)
            throw new ArithmeticException("Non-positive root degree");

        if ((n & 1) == 0 && this.signum < 0)
            throw new ArithmeticException("Negative radicand with even root 
degree");
    }


What do you think?

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/24898#discussion_r2233863415

Reply via email to