[Haskell-cafe] Re: A question about "monad laws"
ajb at spamcop.net
ajb at spamcop.net
Thu Feb 14 18:06:33 EST 2008
G'day all.
Quoting Thorkil Naur <naur at post11.tele.dk>:
> Finding the "machine epsilon", perhaps, that is, the smallest
> (floating point,
> surely) number for which 1.0+machine_eps==1.0 would be a candidate?
The machine epsilon is the smallest relative separation between two
adjacent normalised floating point numbers. (The largest is the
machine epsilon multiplied by the radix, more or less.)
So as I understand it, if you're thinking relative error, this test:
(fabs(x1-x2) < machine_eps * fabs(x1))
should be true if and only if x1 == x2, assuming that x1 and x2 are
nonzero and normalised.
I've always had the impression that using the machine epsilon for
pseudo-equality testing is fairly useless, especially if you can work
out a meaningful problem-specific tolerance.
What seems to be more useful is using the machine epsilon to compute an
estimate of how much relative error your algorithm accumulates. I've
seen this in a lot of Serious Numeric Code(tm), and I've done it myself
(probably inexpertly) a few times.
I haven't tried this, but I imagine that a computed relative error
estimate could be useful for assisting your approximate-equality
tests under some circumstances. Richard might know of some
circumstances where this sort of thing would be useful.
Cheers,
Andrew Bromage
More information about the Haskell-Cafe
mailing list