RFR: 8366017: Extend the set of inputs handled by fast paths in FloatingDecimal
Shaojin Wen
swen at openjdk.org
Tue Oct 14 17:57:10 UTC 2025
On Thu, 28 Aug 2025 15:24:21 GMT, Raffaello Giulietti <rgiulietti at openjdk.org> wrote:
> Yet another step in modernizing `FloatingDecimal`s floating-point parsing.
src/java.base/share/classes/jdk/internal/math/FloatingDecimal.java line 53:
> 51: private static final int SINGLE_EXP_SHIFT = FloatConsts.SIGNIFICAND_WIDTH - 1;
> 52: private static final int SINGLE_FRACT_HOB = 1 << SINGLE_EXP_SHIFT;
> 53: private static final int SINGLE_MAX_DECIMAL_DIGITS = 7;
Suggestion:
private static final int
EXP_SHIFT = DoubleConsts.SIGNIFICAND_WIDTH - 1,
MAX_SMALL_BIN_EXP = 62,
MIN_SMALL_BIN_EXP = -63 / 3,
MAX_DECIMAL_DIGITS = 15, // max{n : 10^n <= 2^P}
FLOG_10_MAX_LONG = 18, // max{i : 10^i ≤ Long.MAX_VALUE}
SINGLE_EXP_SHIFT = FloatConsts.SIGNIFICAND_WIDTH - 1,
SINGLE_FRACT_HOB = 1 << SINGLE_EXP_SHIFT,
SINGLE_MAX_DECIMAL_DIGITS = 7;
private static final long
FRACT_HOB = 1L << EXP_SHIFT, // assumed High-Order bit
EXP_ONE = (long) DoubleConsts.EXP_BIAS << EXP_SHIFT; // exponent of 1.0
How about this style?
src/java.base/share/classes/jdk/internal/math/FloatingDecimal.java line 164:
> 162: private static final BinaryToASCIIConverter B2AC_NOT_A_NUMBER = new ExceptionalBinaryToASCIIBuffer(NAN_REP);
> 163: private static final BinaryToASCIIConverter B2AC_POSITIVE_ZERO = new BinaryToASCIIBuffer(false, new byte[] {'0'});
> 164: private static final BinaryToASCIIConverter B2AC_NEGATIVE_ZERO = new BinaryToASCIIBuffer(true, new byte[] {'0'});
Suggestion:
private static final BinaryToASCIIConverter
B2AC_POSITIVE_INFINITY = new ExceptionalBinaryToASCIIBuffer(INFINITY_REP),
B2AC_NEGATIVE_INFINITY = new ExceptionalBinaryToASCIIBuffer("-" + INFINITY_REP),
B2AC_NOT_A_NUMBER = new ExceptionalBinaryToASCIIBuffer(NAN_REP),
B2AC_POSITIVE_ZERO = new BinaryToASCIIBuffer(false, new byte[] {'0'}),
B2AC_NEGATIVE_ZERO = new BinaryToASCIIBuffer(true, new byte[] {'0'});
src/java.base/share/classes/jdk/internal/math/FloatingDecimal.java line 905:
> 903: new PreparedASCIIToBinaryBuffer(0.0d, 0.0f);
> 904: private static final PreparedASCIIToBinaryBuffer A2BC_NEGATIVE_ZERO =
> 905: new PreparedASCIIToBinaryBuffer(-0.0d, -0.0f);
Suggestion:
private static final PreparedASCIIToBinaryBuffer
A2BC_POSITIVE_INFINITY = new PreparedASCIIToBinaryBuffer(Double.POSITIVE_INFINITY, Float.POSITIVE_INFINITY),
A2BC_NEGATIVE_INFINITY = new PreparedASCIIToBinaryBuffer(Double.NEGATIVE_INFINITY, Float.NEGATIVE_INFINITY),
A2BC_NOT_A_NUMBER = new PreparedASCIIToBinaryBuffer(Double.NaN, Float.NaN),
A2BC_POSITIVE_ZERO = new PreparedASCIIToBinaryBuffer(0.0d, 0.0f),
A2BC_NEGATIVE_ZERO = new PreparedASCIIToBinaryBuffer(-0.0d, -0.0f);
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/26990#discussion_r2347233355
PR Review Comment: https://git.openjdk.org/jdk/pull/26990#discussion_r2347234167
PR Review Comment: https://git.openjdk.org/jdk/pull/26990#discussion_r2347235787
More information about the core-libs-dev
mailing list