[Haskell-cafe] smallest double eps

Grady Lemoine grady.lemoine at gmail.com
Sun Oct 1 02:01:20 EDT 2006

> > last $ takeWhile (\x -> 1 + x /= 1) (iterate (/2) 1)
> 2.220446049250313e-16

This works because of the way IEEE floating-point numbers are
represented, so it's good for the majority of machines, but it is
technically a hack, in that it depends on a representation of
floating-point numbers in some form akin to the IEEE (1.mantissa
bits)*2^(exponent).  It would be nice for those of us interested in
doing numerical work in Haskell if we could have machine epsilon
available from the language, in case we're running on a machine where
that assumption doesn't hold.  I don't know where this would belong --
the Numeric library seems mainly concerned with reading and showing
numbers, and System is more about interacting with the OS than making
statements about the properties of the underlying hardware.

--Grady Lemoine

More information about the Haskell-Cafe mailing list