[Haskell-cafe] instance Enum Double considered not entirelygreat?

Richard O'Keefe ok at cs.otago.ac.nz
Tue Sep 27 06:35:41 CEST 2011


On 27/09/2011, at 4:55 PM, Chris Smith wrote:
> So there are two perspectives here.  One is that we should think in
> terms of exact values of the type Float, which means we'd want to
> exclude it, because it's larger than the top end of the range.  The
> other is that we should think of approximate values of real numbers, in
> which case it's best to pick the endpoint closest to the stated one, to
> correct for what's obviously unintended drift due to rounding.

My perspective on this is neither of the above.
My perspective is that if I say I want numbers in the range L..U,
anything outside that range is wrong and could be catastrophically
wrong.

> So that's what this is about: do we think of Float as an approximate
> real number type, or as an exact type with specific values.

That may be the way you see it, but it's not the way I see it.
The way I see it is that the *order* properties are more fundamental
than the *arithmetic* properties, and that it is far less important
to produce value which is approximately the end point (after all,
[0,2..9] doesn't include 10) than it is to ensure that all the
results are in the interval.

And I would be *delighted* if Haskell's compare raised an exception
if either argument were a NaN; that's what Real.compare does in SML.

Floating point *operations* are approximate;
floating point *numbers* are, according to the relevant standards
(IEEE, LIA), precise.





More information about the Haskell-Cafe mailing list