My floating-point calculations are acting strangely and giving me different answers on different machines.
First, see question 14.2.
If the problem isn't that simple, recall that digital computers usually use floating-point formats which provide a close but by no means exact simulation of real number arithmetic. Underflow, cumulative precision loss, and other anomalies are often troublesome.
Don't assume that floating-point results will be exact, and especially don't assume that floating-point values can be compared for equality. (Don't throw haphazard ``fuzz factors'' in, either; see question 14.5.)
These problems are no worse for C than they are for any other computer language. Certain aspects of floating-point are usually defined as ``however the processor does them'' (see also question 11.34), otherwise a compiler for a machine without the ``right'' model would have to do prohibitively expensive emulations.
This article cannot begin to list the pitfalls associated with, and workarounds appropriate for, floating-point work. A good numerical programming text should cover the basics; see also the references below.
References:
Kernighan and Plauger,
The Elements of Programming Style Sec. 6 pp. 115-8
Knuth, Volume 2 chapter 4
David Goldberg,
``What Every Computer Scientist Should Know
about Floating-Point Arithmetic''
Read sequentially: prev next up top
This page by Steve Summit // Copyright 1995 // mail feedback