Re: Floating point computations differ in different runs of same program
In message <bjb9r35m1g1hrmm7ueefaca9vf86scg75o@4ax.com>, Tim Slattery
<Slattery_T@bls.gov> writes
Richard Herring <junk@[127.0.0.1]> wrote:
In message
<7775ee7d-0bc9-4a3c-b3c9-0b015a8b22df@d70g2000hsf.googlegroups.com>,
kasthurirangan.balaji@gmail.com writes
Do not use "=="
operator for comparing doubles.
Do not offer such sweeping generalisations.
If it weren't appropriate to use operator== on doubles, the language
wouldn't supply it.
Since floating point numbers - single or double precision - are
approximations, the == operator is not appropriate for them.
Best way is using abs, subtraction and
less than operator with the precisions defined.
The "best" way depends on what you are trying to do. If testing for
equality is what you want to do, then operator== is the best way.
fabs(d1-d2) < 0.0001
where d1,d2 are two doubles.
This may be appropriate in some circumstances, but it is not a test for
equality.
Maybe, but it's the best you can do with floating point numbers.
I was going to compose a detailed refutation of this post, but I see
Pete Becker has already said everything I would have done, and probably
better.
First, understand the algorithm. Second, understand how floating-point
actually works. _Then_ you can start giving advice about what condition
you should be testing for.
--
Richard Herring