On Mon, 22 Jan 2024 18:52:32 GMT, fabioromano1 <d...@openjdk.org> wrote:

>> As you note, that would probably require two divisions. I don't know if the 
>> JIT compiler can detect that the arguments are the same and emit just one 
>> division instead.
>> I think your code is good enough for the purpose of [Mutable]BigInteger, and 
>> better than the current one.
>
> @rgiulietti I've added a method to check the results of tests.

Hi @fabioromano1,
MutableBigInteger.divWord is not a part of the public JDK interface. If you're 
trying to optimize a method that's publicly available, please add a benchmark 
for that method. You can find the instructions for running benchmarks 
[here](https://github.com/openjdk/jdk/blob/master/doc/testing.md#microbenchmarks).
 You will need to tell configure where it can find JMH, instructions 
[here](https://github.com/openjdk/jdk/blob/master/doc/testing.md#configuration).
 If you aren't familiar with JMH, you can find some examples 
[here](https://github.com/openjdk/jdk/tree/master/test/micro/org/openjdk/bench/java/math).

If you check the context where `divWord` is called, you'll notice that it's 
only used when the dividend is a negative long. If you dig deeper, you'll also 
notice that dividend is only negative if the divisor is a negative int. With 
these constraints on the input arguments, the worst-case approximation error is 
much lower than what you presented in your earlier comment. The `divWord` 
method might not be worth optimizing.

If you take another look at the context where `divWord` is called, you'll 
probably also notice that the surrounding code can be simplified to 
`Long.divideUnsigned` and `Long.remainderUnsigned`. These methods are usually 
optimized by the CPU, so this change might actually improve the performance of 
some BigInteger operations.

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

PR Comment: https://git.openjdk.org/jdk/pull/17291#issuecomment-1968511350

Reply via email to