RFR 8015978: Incorrect transformation of XPath expression "string(-0)"
Aleksej Efimov
aleksej.efimov at oracle.com
Mon Jun 10 15:02:31 UTC 2013
Hi Joe,
We can replace the "Double.isNaN(d) || Double.isInfinite(d)" with
"!Double.isFinite(d)" - I agree that this one check looks better, but we
still need to do the -0.0 -> 0.0 conversion to solve the reported
problem. And as I understand (might be wrong) modification of this check
won't help us to achieve this goal, we still need to do the conversion:
+ //Convert -0.0 to +0.0 other values remains the same
+ d = d + 0.0;
+
Regards,
-Aleksej
On 06/09/2013 10:23 PM, Joe Darcy wrote:
> Hello Aleksej,
>
> Looking at the code, I have another suggestion. If this code can run
> exclusively on JDK 8 or later, replace
>
> 955 if (Double.isNaN(d) || Double.isInfinite(d))
> 956 return(Double.toString(d));
>
> with
>
> 955 if (!Double.isFinite(d))
> 956 return(Double.toString(d));
>
> Cheers,
>
> -Joe
>
> On 6/9/2013 11:18 AM, Aleksej Efimov wrote:
>> Joe,
>>
>> I definitely like it:
>> 1. Its a one-line change - perfect size.
>> 2. Its fastest one from discussed previously.
>> 3. -0.0 -> 0.0 has tests.
>> 4. And it solves our problem.
>>
>> As a result of all props the next version of webrev:
>> http://cr.openjdk.java.net/~coffeys/webrev.8015978.v2/
>> <http://cr.openjdk.java.net/%7Ecoffeys/webrev.8015978.v2/>
>>
>> Thanks
>> -Aleksej
>>
>> On 06/07/2013 11:11 PM, huizhe wang wrote:
>>> Nice. One-line change, I guess Aleksej would love it :-)
>>>
>>> On 6/7/2013 10:19 AM, Joe Darcy wrote:
>>>> I'll do you one better; you can turn a negative zero into a
>>>> positive zero leaving other values unchanged like this:
>>>>
>>>> d = d + 0.0;
>>>>
>>>> In IEEE 754 under the round-to-nearest-even rounding mode required
>>>> by Java
>>>> -0.0 + 0.0 => (+)0.0
>>>>
>>>> This trick is used in various places in Java's numerical libraries,
>>>> is required behavior by our specifications, and even has some tests
>>>> for it :-)
>>>>
>>>> -Joe
>>>>
>>>> On 6/7/2013 8:43 AM, David Chase wrote:
>>>>> Wouldn't be more efficient to do the following, assuming that the
>>>>> full Java compilation chain respects the trickiness of 0 vs -0:
>>>>>
>>>>> if (d == 0.0) {
>>>>> d=0.0 // Jam -0 == +0 to +0, per
>>>>> http://www.w3.org/TR/xpath/#function-string
>>>>>
>>>>> }
>>>>>
>>>>> Division's plenty more expensive than assigning a constant,
>>>>> especially on platforms that lack hardware FP division.
>>>>>
>>>>> David
>>>>>
>>>>> On 2013-06-07, at 2:03 AM, huizhe wang <huizhe.wang at oracle.com>
>>>>> wrote:
>>>>>
>>>>>> Hi Aleksej,
>>>>>>
>>>>>> According to XPath spec, both positive and negative zero are
>>>>>> converted to the string 0, so it seems doesn't matter. But if you
>>>>>> want to detect the negative zero, you may do the following:
>>>>>> if (d == 0.0 && 1/d < 0.0) {
>>>>>> d=0.0
>>>>>> }
>>>>>>
>>>>>> Recognizing that (-0.0 == 0.0), and (1/(-0.0) == -Infinity).
>>>>>>
>>>>>> -Joe
>>>>>
>>>>
>>>
>>
>
More information about the core-libs-dev
mailing list