[Haskell-cafe] Proper Handling of Exceptional IEEE Floating Point Numbers

Casey McCann syntaxglitch at gmail.com
Thu Apr 22 13:30:36 EDT 2010


On Thu, Apr 22, 2010 at 11:34 AM, Barak A. Pearlmutter <barak at cs.nuim.ie> wrote:
> Comparison of exceptional IEEE floating point numbers, like Nan, seems
> to have some bugs in ghci (version 6.12.1).

Arguably, the "bug" in question is the mere existence of Eq and Ord
instances for IEEE floats. They don't, can't, and never will work
correctly. A similar topic was discussed here not too long ago; IEEE
floating point so-called "numbers" lack reflexive equality and
associativity of addition and multiplication, among other properties
one might take for granted in anything calling itself a number. If
memory serves me, someone provided this informative link in the
previous thread: http://docs.sun.com/source/806-3568/ncg_goldberg.html

That said, given that Haskell seems to be following the
well-established tradition of willfully disregarding the inconvenient
aspects of floats as far as the type system is concerned, I would say
that compare returning GT is particularly unintuitive. If something
must stand in for a result of "arguments are non-comparable", EQ is
marginally more appealing, as it is expected to be reflexive, as
"non-comparable" is. An invalid comparison evaluating to _|_ is
arguably more correct, but I personally find the idea of introducing
more bottoms rather distasteful. On the other hand, crashing the
program is usually better than incorrect results, so in this case it's
probably justified.

The only correct solution would be to strip floating point types of
their instances for Ord, Eq, and--therefore, by extension--Num. For
some reason, no one else seems to like that idea. I can't imagine
why...

- C.


More information about the Haskell-Cafe mailing list