RFR: JDK-8211161: java.lang.ArithmeticException: divide by zero from java.text.DecimalFormat.format()

Nasser Ebrahim enasser at in.ibm.com
Wed Sep 26 17:44:25 UTC 2018


Hi Joe,

Thank you for your review comments. 

I agree with you that the specification says that "The floating-point 
operations of the Java Virtual Machine do not throw exceptions, trap, or 
otherwise signal the IEEE 754 exceptional conditions of invalid operation, 
division by zero, overflow, underflow, or inexact." as per the JVM 
specification 
https://docs.oracle.com/javase/specs/jvms/se10/html/jvms-2.html#jvms-2.8.1
.

I noticed that the SIGFPE is consumed and no exception is thrown when 
SIGFPE is enabled before create JVM. Hence, there is an inconsistency in 
the hotspot behavior when the SIGFPE is enabled before and after create 
JVM. If the trap is enabled before create JVM, it just catch the exception 
and continue where as if the trap is enabled after create JVM, then it 
result in the ArithmeticException. Hence, the JVM behavior needs to be 
fixed to make the behavior consistent. 

Still, I feel it makes more sense to check the sign bit to decide a number 
is negative or positive rather than divide-by-zro to make infinity and 
compare with zero. If you agree with my view, a separate bug can be opened 
to fix the JVM inconsistent behavior. Otherwise, we can change the 
component of this bug. Please comment.

Thank you, 
Nasser Ebrahim



From:   joe darcy <joe.darcy at oracle.com>
To:     Nasser Ebrahim <enasser at in.ibm.com>, core-libs-dev Libs 
<core-libs-dev at openjdk.java.net>
Date:   09/26/2018 10:29 PM
Subject:        Re: RFR: JDK-8211161: java.lang.ArithmeticException: 
divide by zero from java.text.DecimalFormat.format()



Hello,

It may be reasonable to replace a divide by zero with check for a 
floating-point -0.0 with a bit-level check, but the stated motivation is 
not reasonable.

The Java platform requires that floating-point divide by zero return an 
infinity (or NaN as the case may be) and it is *incorrect* and 
non-conformant to throw an ArithmeticException in that case. Such 
behavior violates the language the JVM specs.

Cheers,

-Joe


On 9/26/2018 9:33 AM, Nasser Ebrahim wrote:
> Hello,
>
> In java.text.DecimalFormat.format(), there is a validation to check
> whether a number is negative zero or not and for that divide by zero is
> used to check for negative infinity which caused the ArithmeticException
> when SIGFPE is enabled in the system. Andrew has opened a bug on my
> behalf. Thank you Andrew.
>
> The corresponding bug is 
https://bugs.openjdk.java.net/browse/JDK-8211161
.
>
> The webrev and stand alone test case is uploaded to
> 
http://cr.openjdk.java.net/~aleonard/8211161/
.
> The recreate step is documented in the bug description.
>
> I have tested the fix with the test cases of the following bugs and
> confirm that it is working.
> 
https://bugs.java.com/view_bug.do?bug_id=4106658

> 
https://bugs.java.com/view_bug.do?bug_id=4106667

> 
https://bugs.java.com/view_bug.do?bug_id=4147706

>
> I did not add any new jtreg test for the current issue as it is not
> functional. Hope that is fine.
>
> Kindly request you to review and comment.
>
> Thank you,
> Nasser Ebrahim
>








More information about the core-libs-dev mailing list