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

Reply via email to