On 17:30 Thu 25 Feb , Christian Maeder wrote: > Nick Bowler schrieb: > > *** Idea #2 *** > > > > Similar to #1, except using a "generic" type instead of Double. > > > > Define a new type, call it FloatConvert, which represents "rational plus > > other values". Something along the lines of: > > > > data FloatConvert > > = FCZero Bool -- Signed zero > > | FCInfinity Bool -- Signed infinity > > | FCNaN Integer -- Generic NaN > > | FCFinite Rational -- Finite, non-zero value > > interesting. What is the Integer in FCNaN for?
Many floating point formats have multiple NaNs. In the IEEE 754 binary formats, a NaN is specified by a maximum exponent and *any* non-zero significand. The extra bits are sometimes used for diagnostic information. There are signaling and quiet NaNs, and they have a sign bit. IEEE 754 recommends that operations involving NaNs preserve as much of this information as possible. I chose Integer since it can encode all of this information. It is desirable for conversions from a type to itself to be the identity function, even in the presence of multiple NaNs. I'm sure many other encodings are workable. > > * While the free-form encoding of NaN values will allow conversion > > from a type to itself to be the identity function, it may make > > it tricky to perform the "ideal" conversion between different > > types. > > I don't understand this last point about "free-form encoding of NaN" It's free-form in that, as I specified it, it's up to the particular RealFloat instance to decide how the Integer is used. This might make conversions which preserve, say, signaling NaNs trickier to implement. > I would come up with a data type like: > > data ExtNum a > = NegativeZero > | NaN > | Infinity Bool > | Num a > > add instances for the classes, Eq, Ord, Num, .... > (depending on "a" that must be at least from the class Num for "0") > > and use "ExtNum Rational" for floating point conversions. -- Nick Bowler, Elliptic Technologies (http://www.elliptictech.com/) _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://www.haskell.org/mailman/listinfo/haskell-prime