# HG changeset patch # User bpb # Date 1389898049 28800 # Node ID b61cf42002002cefdcd90757f1ded3d1bdbd9009 # Parent c07fd977f9e6ddbef6d7be6d20fcebde5359042d 6667086: Double.doubleToLongBits(final double value) contains inefficient test for NaN Summary: Use isNaN() to test the parameter. Reviewed-by: darcy, psandoz diff --git a/src/share/classes/java/lang/Double.java b/src/share/classes/java/lang/Double.java --- a/src/share/classes/java/lang/Double.java +++ b/src/share/classes/java/lang/Double.java @@ -833,14 +833,10 @@ * @return the bits that represent the floating-point number. */ public static long doubleToLongBits(double value) { - long result = doubleToRawLongBits(value); - // Check for NaN based on values of bit fields, maximum - // exponent and nonzero significand. - if ( ((result & DoubleConsts.EXP_BIT_MASK) == - DoubleConsts.EXP_BIT_MASK) && - (result & DoubleConsts.SIGNIF_BIT_MASK) != 0L) - result = 0x7ff8000000000000L; - return result; + if (!isNaN(value)) { + return doubleToRawLongBits(value); + } + return 0x7ff8000000000000L; } /** diff --git a/src/share/classes/java/lang/Float.java b/src/share/classes/java/lang/Float.java --- a/src/share/classes/java/lang/Float.java +++ b/src/share/classes/java/lang/Float.java @@ -741,14 +741,10 @@ * @return the bits that represent the floating-point number. */ public static int floatToIntBits(float value) { - int result = floatToRawIntBits(value); - // Check for NaN based on values of bit fields, maximum - // exponent and nonzero significand. - if ( ((result & FloatConsts.EXP_BIT_MASK) == - FloatConsts.EXP_BIT_MASK) && - (result & FloatConsts.SIGNIF_BIT_MASK) != 0) - result = 0x7fc00000; - return result; + if (!isNaN(value)) { + return floatToRawIntBits(value); + } + return 0x7fc00000; } /**