6667086: Double.doubleToLongBits(final double value) contains inefficient test for NaN

Use isNaN() to test the parameter.

Reviewed-by: darcy, psandoz
This commit is contained in:
Brian Burkhalter 2014-01-16 15:56:40 -08:00
parent 72803ca57e
commit bfd742becf
2 changed files with 8 additions and 16 deletions

View File

@ -833,14 +833,10 @@ public final class Double extends Number implements Comparable<Double> {
* @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;
}
/**

View File

@ -741,14 +741,10 @@ public final class Float extends Number implements Comparable<Float> {
* @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;
}
/**