On 11/15/2022 12:13 PM, Brian Goetz wrote:
On 11/15/2022 2:55 PM, Dan Heidinga wrote:
Hi Angelos,
The overall direction and writeup for this looks good to me. I think
we need to be more specific about how doubles & floats fit into this
though as they are perpetual source of special cases.
Indeed, floating point is the gift that keeps on giving.
Joe recently did some nice work in the spec of Float and Double,
outlining the various different ways in which floats can be compared.
This allows language features like pattern matching, casting, and
switch to appeal to "compared by FooBar comparison", rather than
spelling it out for each use.
FYI, the new text in question is:
https://download.java.net/java/early_access/jdk20/docs/api/java.base/java/lang/Double.html#fpNumericalEq
For the cases in the draft JEP, there have been separate discussions
working through the details. Putting aside how it might be implemented,
for the
floating-point type -> integral type
cases, conceptually if the same real number can be presented in the
floating-point type and the integral type, then the conversion is exact.
(While floating-point values are often thought of as "fuzzy," each
finite floating-point value represents some particular real number.
Finite binary floating-point values are sums of the powers of 2 where
the exponent difference of the powers is bounded by the significand
width of the floating-point format in question.) The main special case
is how conversion of -0.0 to an integral type is defined for purposes of
instanceof. The desired double -> float behavior can be inferred from
IEEE 754 concepts.
HTH,
-Joe