Perhaps some motivation is in order. In an interval arithmetic library, I have 'Bounded a' as a constraint on the instance 'Fractional (Interval a)' because an interval of maximum bound can result when dividing by an interval containing zero. In a function solver library I wrote, parameters need to be specified with constraints on their values - so that the natural default can be (minBound, maxBound) I require them to be Bounded. Having these bounds be plus and minus infinity is elegant, but not necessary for either of these applications, so I think that even if some platforms don't have affine infinities there should still be a suitably defined maxBound and minBound for Double - just maximum and minimum representable values should be fine. (Besides, exactly how many floating point implementations use projective infinities?) Frederik On Sun, Mar 13, 2005 at 11:08:26PM +0000, Thomas Davie wrote:
I may be barking up the wrong tree here, but I think the key to this discussion is that real numbers are not bounded, while doubles are bounded. One cannot say what the smallest or largest real number are, but one can say what the smallest or largest double are (and it is unfortunately implementation specific, and probably pretty messy to set up). We could define maxBound as (2^(mantisa_space))^(2^(exponent_space)) and min bound pretty similarly... But I'm sure that everyone will agree that this is a horrible hack.
One may even question whether Doubles should be bounded, in that they are an attempt to represent real numbers, and as such should come as close as is possible to being real numbers (meaning not having bounds).
Sorry for a possibly irrelevant ramble.
Bob
On Mar 13, 2005, at 11:02 PM, Lennart Augustsson wrote:
And what would you have minBound and maxBound be? I guess you could use +/- the maximum value representable. Going for infinity is rather dodgy, and assumes an FP representation that has infinity.
-- Lennart
Frederik Eaton wrote:
Interesting. In that case, I would agree that portability seems like another reason to define a Bounded instance for Double. That way users could call 'maxBound' and 'minBound' rather than 1/0 and -(1/0)... Frederik On Fri, Mar 11, 2005 at 11:10:33AM +0100, Lennart Augustsson wrote:
Haskell does not guarantee that 1/0 is well defined, nor that -(1/0) is different from 1/0. While the former is true for IEEE floating point numbers, the latter is only true when using affine infinities.
-- Lennart
Frederik Eaton wrote:
Shouldn't Double, Float, etc. be instances of Bounded?
I've declared e.g.
instance Bounded Double where minBound = -(1/0) maxBound = 1/0
in a module where I needed it and there doesn't seem to be any issue with the definition...
Frederik
_______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell