On Wed, 26 Apr 2023 01:47:07 GMT, Joe Darcy <da...@openjdk.org> wrote:
>> A reimplementation of `BigDecimal.[double|float]Value()` to enhance >> performance, avoiding an intermediate string and its subsequent parsing on >> the slow path. > > src/java.base/share/classes/java/math/BigDecimal.java line 3749: > >> 3747: */ >> 3748: @Override >> 3749: public float floatValue() { > > If the total size of code were a concern, I wouldn't be adverse to > floatValue() being implemented as > > return (float)doubleValue(); > > Given the 2p+2 property between the float and double formats, BigDecimal -> > double -> float and BigDecimal -> float round the same way. No, that would not be correct. It would be subject to [double rounding](https://en.wikipedia.org/wiki/Rounding#Double_rounding), against the spec. For example, `BigDecimal` 1.000000059604644775390626 should round to `float` `1.0000001f`. When going to the closest `double` and then to the closest `float`, however, it first rounds to `double` `1.0000000596046448` and the to `float` `1.0f`. ------------- PR Review Comment: https://git.openjdk.org/jdk/pull/9410#discussion_r1177530816