JDK 8 code review request for 7091682 "Move sun.misc.FpUtils code into java.lang.Math"

Joe Darcy joe.darcy at oracle.com
Mon Sep 19 16:48:28 UTC 2011


PS I've added your comment to bug 6667086 "Double.doubleToLongBits(final 
double value) contains inefficient test for NaN."

-Joe

On 9/18/2011 6:15 PM, Joe Darcy wrote:
> Hi Jeff.
>
> I'll consider that for some possible future work.
>
> Thanks,
>
> -Joe
>
> Jeff Hain wrote:
>> Hi.
>> There are some possible optimizations for some methods.
>>
>> For nextAfter(double,double) (same for float version), instead of 
>> testing NaN-ity right away,
>> we can test most common (or at least regular) cases first:
>> public static double nextAfter(double start, double direction) {
>>     // Balancing out by branching to going-down case first,
>>     // for it is heavier than going-up case (test if start is +-0.0).
>>     if (start > direction) {
>>         // Going down.
>>         if (start == 0.0d) {
>>             // start is +0.0 or -0.0
>>             return -Double.MIN_VALUE;
>>         }
>>         final long transducer = Double.doubleToRawLongBits(start);
>>         assert transducer != 0L;
>>         return Double.longBitsToDouble(transducer + ((transducer > 
>> 0L) ? -1L:1L));
>>     } else if (start < direction) {
>>         // Going up.
>>         // Add +0.0 to get rid of a -0.0 (+0.0 + -0.0 => +0.0)
>>         // then bitwise convert start to integer.
>>         final long transducer = Double.doubleToRawLongBits(start + 
>> 0.0d);
>>         return Double.longBitsToDouble(transducer + ((transducer >= 
>> 0L) ? 1L:-1L));
>>     } else if (start == direction) {
>>         return direction;
>>     } else { // start and/or direction is NaN
>>         return start + direction;
>>     }
>> }
>>
>> Same for nextUp(double) and float version (also, testing transducer 
>> >= 0L
>> instead of d >= 0.0D seems to help):
>> public static double nextUp(double d) {
>>     if (d < Double.POSITIVE_INFINITY) {
>>         final long transducer = Double.doubleToRawLongBits(d + 0.0D);
>>         return Double.longBitsToDouble(transducer + ((transducer >= 
>> 0L) ? 1L:-1L));
>>     } else { // d is NaN or +Infinity
>>         return d;
>>     }
>> }
>>
>> -Jeff
>>
>> ------------------------------------------------------------------------
>> *De :* "joe.darcy at oracle.com" <joe.darcy at oracle.com>
>> *À :* core-libs-dev <core-libs-dev at openjdk.java.net>
>> *Envoyé le :* Samedi 17 Septembre 2011 3h52
>> *Objet :* JDK 8 code review request for 7091682 "Move 
>> sun.misc.FpUtils code into java.lang.Math"
>>
>> Hello.
>>
>> Please review the changes to address
>>
>>   7091682 "Move sun.misc.FpUtils code into java.lang.Math"
>>   http://cr.openjdk.java.net/~darcy/7091682.0/ 
>> <http://cr.openjdk.java.net/%7Edarcy/7091682.0/>
>>
>> As implied by the synopsis, where appropriate JDK-implementation code 
>> used to provide functionality in java.lang.Math and 
>> java.lang.StrictMath is moved out of sun.misc.* and into 
>> java.lang.Math.  Uses of methods available in java.lang.Math and 
>> switched to that entry point as opposed to the sun.misc one.  
>> Additionally, the sun.misc methods whose implementation was moved 
>> were also deprecated.
>>
>> Later in JDK 8, I will probably add some of the remaining 
>> un-deprecated methods in sun.misc.FpUtils as 
>> java.lang.Math/StrictMath methods.
>>
>> Thanks,
>>
>> -Joe
>>
>>
>




More information about the core-libs-dev mailing list