Floating Point Expectations
John A. Weeks III
john at newave.UUCP
Fri May 25 12:18:06 AEST 1990
In article <411 at yonder.UUCP> michael at yonder.UUCP (Michael E. Haws) writes:
>Is it reasonable to expect that the following code should
>work the same on all platforms, and produce "good" results?
>
> if ((45.0 / 100.0) == .45)
> printf("good\n");
> else
> printf("bad\n");
E-gads. Don't ever try "exact" comparisions of floating point numbers.
After all, floating point numbers in a computer are a binary representation
of an "approximation" to the real number value that you immagined when you
typed in the base 10 symbols.
You can compare integers representations, within the limits of the machine
representation, but floating point numbers should be range checked. For
example, try the following:
double ratio;
ratio = 45.0 / 100.0;
if ( ratio > 0.44999 && ratio < 0.45001 )
printf( "good\n" );
else
printf( "bad\n" );
Some people like to use a subtract and a "fabs" of some sort (macro
or a procedure):
if ( fabs( (45.0 / 100.0) ) < 0.001 )
printf( "good\n" );
else
printf( "bad\n" );
In this manner, you can substiture a define or a variable for the
0.001 incase you decide to globally change your tolerance level.
There are a few legit places that you can compare real numbers, but
this is best left for experts that know _when_ and _why_ it is legit.
-john-
--
===============================================================================
John A. Weeks III (612) 942-6969 john at newave.mn.org
NeWave Communications ...uunet!rosevax!bungia!wd0gol!newave!john
===============================================================================
More information about the Comp.unix.wizards
mailing list