On 11/1/2024 12:11 PM, Eirik Bjørsnøs wrote:
Hi,

Just an observation from a floating point layman:

I noticed that Float and Double uses "It is equal to the value.." when describing various constant values like MIN_VALUE, MAX_VALUE etc.


A few releases back, a discussion of "quality, equivalence, and comparison of floating-point values" was added to java.lang.Double:

https://docs.oracle.com/en/java/javase/23/docs/api/java.base/java/lang/Double.html#equivalenceRelation

That note discusses the topics in question.


However, Float.NaN and Double.NaN instead uses "equivalent to":

    /**
     * A constant holding a Not-a-Number (NaN) value of type
     * {@code float}.  It is /equivalent/ to the value returned by
     * {@code Float.intBitsToFloat(0x7fc00000)}.
     */
    public static final float NaN = 0.0f / 0.0f;


Is this difference in terms deliberate and justified by there being more than one NaN bit pattern? Is the implementation allowed to return any NaN, since all NaNs are equivalent, even when not equal?


In terms of NaN, relevant factors are there are multiple bit patterns than encode a NaN and a NaN is not equal to itself per the IEEE 754 standard.

HTH; cheers,

-Joe

Reply via email to