Floating point non-exactness
Richard A. O'Keefe
ok at goanna.cs.rmit.oz.au
Tue Jul 31 13:53:27 AEST 1990
In article <622 at .tetrauk.UUCP>, rick at .tetrauk.UUCP (Rick Jones) writes:
> fpcmp (double a, double b)
>
> returns 0 if a equals b within the reliable precision,
> else returns 1 if a > b, or -1 if a < b
>
> Real problem: how do you write fpcmp() ?
See Knuth, "The Art of Computer Programming", vol 2, "Semi-Numerical Methods"
He defines "approximate" versions of <, >, and *TWO* approximate versions of
==. Note that the appropriate "tolerance" to use does NOT depend only on
the properties of your floating-point arithmetic, but on details of your
algorithm.
The ultimate answer to your question is to take a course on numerical
analysis. I sometimes wonder whether there ought to be a generally
understood qualification for computer programmers: LFP (licensed to
use floating-point) (:-).
> Can you ensure that "fpcmp (a, b)" and "fpcmp (a-b, 0.0)" yield the same result
> when a and b are very close?
No. In many computer arithmetic systems, a-b may collapse to a precise 0.
See the axioms Knuth gave.
--
Science is all about asking the right questions. | ok at goanna.cs.rmit.oz.au
I'm afraid you just asked one of the wrong ones. | (quote from Playfair)
More information about the Comp.lang.c
mailing list