From bfd742becf68e310b7a10704fb922cbcc661e4d7 Mon Sep 17 00:00:00 2001 From: Brian Burkhalter Date: Thu, 16 Jan 2014 15:56:40 -0800 Subject: [PATCH] 6667086: Double.doubleToLongBits(final double value) contains inefficient test for NaN Use isNaN() to test the parameter. Reviewed-by: darcy, psandoz --- jdk/src/share/classes/java/lang/Double.java | 12 ++++-------- jdk/src/share/classes/java/lang/Float.java | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/jdk/src/share/classes/java/lang/Double.java b/jdk/src/share/classes/java/lang/Double.java index 690ca6a8dc3..9ba150e7156 100644 --- a/jdk/src/share/classes/java/lang/Double.java +++ b/jdk/src/share/classes/java/lang/Double.java @@ -833,14 +833,10 @@ public final class Double extends Number implements Comparable { * @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/jdk/src/share/classes/java/lang/Float.java b/jdk/src/share/classes/java/lang/Float.java index 5cc28f99bff..17d2cd7d206 100644 --- a/jdk/src/share/classes/java/lang/Float.java +++ b/jdk/src/share/classes/java/lang/Float.java @@ -741,14 +741,10 @@ public final class Float extends Number implements Comparable { * @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; } /**