[Haskell-cafe] implementing RealFloat decodeFloat

Henning Thielemann lemming at henning-thielemann.de
Fri Jan 7 00:09:30 CET 2011

Claude Heiland-Allen schrieb:

> I've been working on [0] Haskell bindings for [1] libqd for [2]
> double-double and quad-double arithmetic,

At the ICIAM conference in Zurich 2007 I heard about the sum algorithm
with two double precision floating point numbers in three talks. :-)
Nice to know that those ideas can be found in a library.

> The double-double and quad-double types do not have a fixed precision,
> though they do have a fixed minimum precision: this means that
> decodeFloat will (in general) lose some precision.  This is because for
> example in:
>   data DoubleDouble = DoubleDouble !CDouble !CDouble
>   dd = DoubleDouble a b
> the semantics are that "dd = a + b", with |a|>>|b|; coupled with the
> IEEE implicit leading 1 bit, this means that there may be large gaps
> between exponents: for example: "1 + 0.5**100 :: DoubleDouble".

They are possible, but do they really occur? I thought the intention of
using two CDoubles is to double the precision, not more. I can hardly
imagine that its algorithms makes use of numbers like (1 + 0.5**100).
Does the library specify something about maximum precision?

I would just represent (1 + 0.5**100) as largeInteger*2^-largeExponent.
You can represent all such numbers without loss of precision, but with
loss of memory. :-)

More information about the Haskell-Cafe mailing list