It's time to play everyone's favorite game show, "What about NaN".

If we have a record:

    record Foo(float f);

We would like Object.equals() to be reflexive, symmetric, and transitive. But if we define equals() in the obvious way (delegating to float==), then `new Foo(Float.NaN`) would not be equal to itself.

If we delegate instead to `Float.compare(this.f, that.f)`, the NaN problem goes away (though comparison becomes modestly more expensive), but now +0 and -0 are distinguished (== treats them the same.)

Reply via email to