On Sat, Sep 21, 2013 at 2:21 AM, Bardur Arantsson <spam@scientician.net> wrote:> On 2013-09-21 06:16, Mike Meyer wrote:> > The single biggest gotcha is that two calculations> > we expect to be equal often aren't. As a result of this, we warn> > people not to do equality comparison on floats.> The Eq instance for Float violates at least one expected law of Eq:>> Prelude> let nan = 0/0> Prelude> nan == nan> FalseYeah, Nan's are a whole 'nother bucket of strange.But if violating an expected law of a class is a reason to drop it asan instance, consider:Prelude> e > 0TruePrelude> 1 + e > 1FalseOf course, values "not equal when you expect them to be" breakingequality means that they also don't order the way you expect:Prelude> e + e + 1 > 1 + e + eTrueSo, should Float's also not be an instance of Ord?I don't think you can turn IEEE 754 floats into a well-behaved numerictype. A wrapper around a hardware type for people who want thatperformance and can deal with its quirks should provide access toas much of the types behavior as possible, and equality comparisonis part of IEEE 754 floats.<mike
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe