I guess it really does do the same thing in Scala: scala> val f = Float.NaN f: Float = NaN
scala> f == f res4: Boolean = false scala> f.equals(f) res5: Boolean = true I guess you really should use == in Clojure, when doing numerical equality. It even does dynamic typed comparisons better than =. Such as: user=> (= (/ 100M 100M) 1) false user=> (== (/ 100M 100M) 1) true Thanks for clearing that up, Aaron. Wes On Tue, Oct 9, 2012 at 5:27 PM, Aaron Cohen <[email protected]> wrote: > On Tue, Oct 9, 2012 at 5:20 PM, David Nolen <[email protected]> > wrote: > > On Tue, Oct 9, 2012 at 4:38 PM, Brian Craft <[email protected]> > wrote: > >> Can someone explain the last result here? > >> > >>> [1 2 3 Float/NaN] > >> [1 2 3 NaN] > >>> (= Float/NaN Float/NaN) > >> false > > This is a primitive comparison and follows IEEE floating point > semantics. NaN must not equal NaN. > > >> ; all is good so far, but... > >> (filter #(= % %) [1 2 3 Float/NaN 4]) > >> (1 2 3 NaN 4) > > This is an Object comparison, and in Java this follows the contract > for equals and hashCode. Thus, an object must be equal to itself (for > HashMap to work). > > See: > http://stackoverflow.com/questions/1408569/why-does-double-nan-equal-itself-when-wrapped-in-a-double-instance > > and in particular: > > http://docs.oracle.com/javase/6/docs/api/java/lang/Double.html#equals(java.lang.Object) > > > > > >> > >> Now I'm lost. What just happened? > > > > The behavior is strange, I've simplified it a bit to the following: > > > >> ((fn [x] (= x x)) Float/NaN) > > true > >> ((fn [x y] (= x y)) Float/NaN Float/NaN) > > false > > > > This is using Clojure 1.4.0 > > > > -- > > You received this message because you are subscribed to the Google > > Groups "Clojure" group. > > To post to this group, send email to [email protected] > > Note that posts from new members are moderated - please be patient with > your first post. > > To unsubscribe from this group, send email to > > [email protected] > > For more options, visit this group at > > http://groups.google.com/group/clojure?hl=en > > -- > You received this message because you are subscribed to the Google > Groups "Clojure" group. > To post to this group, send email to [email protected] > Note that posts from new members are moderated - please be patient with > your first post. > To unsubscribe from this group, send email to > [email protected] > For more options, visit this group at > http://groups.google.com/group/clojure?hl=en > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to [email protected] Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/clojure?hl=en
