On Mon, 15 Sep 2025 17:59:28 GMT, fabioromano1 <d...@openjdk.org> wrote:

>> HI @fabioromano1,
>> Ah, I haven't worked on that code for exact divide in a while!
>> For some historical context, the method was added as part of JSR 13, Decimal 
>> Arithmetic Enhancement, in JDK 5. A fuller derivation of the old bound is 
>> discussed in:
>> 
>> Fixed, Floating, and Exact Computation with Java's BigDecimalFixed, 
>> Floating, and Exact Computation with Java's BigDecimal
>> Dr. Dobb's Journal ยท Jun 1, 2004
>> https://web.archive.org/web/20210505132021/http://www.drdobbs.com/jvm/fixed-floating-and-exact-computation-wit/184405721
>> 
>> At the time I wrote the code, I looked around at the usual sources, Knuth, 
>> etc. and asked around for a bound of decimal digits of 1/b if 1/b is 
>> representable, but didn't find anything.
>> 
>> I see you're still revising the implementation. Once this settles down, a 
>> review comment from me will be "restore some textual discussion of what the 
>> algorithm is doing."
>> 
>> For testing, I think it would be good to probe at some values where the old 
>> and new digit estimation techniques differ.
>> 
>> Also, I think both @rgiulietti and myself look at this PR before it goes 
>> back; I'll adjust the reviewer count accordingly.
>
> @jddarcy The technique used here is the following: take $a/b$, compute $b' = 
> b/(2^i 5^j)$, where $i = \max(n \in N \mid b \equiv 0 \mod 2^n)$ and $j = 
> \max(n \in N \mid b \equiv 0 \mod 5^n)$. If $a \not\equiv 0 \mod b'$, then 
> $a/b$ is not a finite decimal number. Otherwise:
> 
> - if $i \le j$, then $a/b = (a/b') \cdot 2^{j-i} \cdot 10^{-j}$;
> - if $i > j$, then $a/b = (a/b') \cdot 5^{i-j} \cdot 10^{-i}$.

@fabioromano1 Please put the [comment 
above](https://github.com/openjdk/jdk/pull/27271#issuecomment-3293326363) in 
the appropriate spot in the `divide()` method, around L.1800.

More generally, everything not obvious should go in a comment in the code to 
help future improvements.

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

PR Comment: https://git.openjdk.org/jdk/pull/27271#issuecomment-3328160026

Reply via email to