views:

244

answers:

2

I just read a statement about the floating point value comparison

Floating point values shall not be compared using either the == or != operators.
Most floating point values have no exact binary representation and have a 
limited precision.

If so what is the best method for comparing two floating point values?

+2  A: 

Generally floating point numbers should be compared using a construct like

if( abs((x1 - x2) < 0.001) )

The reason for the warning you quoted is you may have two methods of calculating something, and they may be equal if you had no rounding error, but the rounding error makes them slightly different.

Kevin Peterson
+2  A: 

The following extension methods may be useful to implement Kevin's suggestion:

public static bool IsEqualTo(this double a, double b, double margin)
{
    return Math.Abs(a - b) < margin;
}

public static bool IsEqualTo(this double a, double b)
{
    return Math.Abs(a - b) < double.Epsilon;
}

So now you can just do:

if(x1.IsEqualTo(x2)) ...
if(x1.IsEqualTo(x2, 0.01)) ...

Just change the IsEqualTo to a more appropriate name, or change the default margin to anything better than double.Epsilon, if needed.

Konamiman