Proposal: New Eq and Ord instances for Double and Float
rl at cse.unsw.edu.au
Mon Sep 26 15:57:46 CEST 2011
Paterson, Ross wrote:
> Roman Leshchinskiy writes:
>> Daniel Fischer wrote:
>> > Proposal: Provide Double and Float with Eq and Ord instances that
>> > introduce a total order.
>> I'm strongly against this, for the reasons that have already been
>> mentioned. and because there a good reasons for why the IEEE semantics
>> is the way it is.
> But compare cannot implement the IEEE semantics and be total, because
> the Ordering type cannot represent "unordered". Something has to give.
> The nearest compare can do is to throw an exception if an argument is
> NaN (with compatible behaviour from the comparison operators).
Why can't compare just specify that its results are undefined when applied
to NaN? As a matter of fact, the Haskell report already does this. It
explicitly says that the results of evaluating expressions like 0/0 are
undefined which means that applying compare to them produces undefined
results as well.
> At least that would not be silent or subtle breakage.
IMO, if we really want to avoid silent breakage we shouldn't have silent
NaNs by default. That is, evaluating 0/0 should throw an exception. Unless
I'm mistaken, this can be implemented by simply setting the appropriate
processor flag. Personally, I would be much more open to a proposal to
make this the default as long as there is no runtime cost and silent NaNs
can be turned back on somehow if a program needs them.
More information about the Libraries