> On 6 Dec 2017, at 10:22, Kevin Bourrillion <[email protected]> wrote: > > I'd strongly expect this to behave exactly as Float.equals() does. The > +0.0/-0.0 problem exists but is nothing new. >
I concur. Float/Double.equals/compare is also used for float/double[] array equals and compare. Paul. > > On Wed, Dec 6, 2017 at 1:07 PM, Brian Goetz <[email protected] > <mailto:[email protected]>> wrote: > 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.) > > > > > -- > Kevin Bourrillion | Java Librarian | Google, Inc. | [email protected] > <mailto:[email protected]>
