I know we can’t compare 2 floating point values using ==. We can only compare they are within some interval of each other.
I know
if(val == 0.512)
is wrong due to errors inherent in floating point calculations and conversion to binary and
should be
if (val in (0.512-epsilon, 0.512+epsilon))
But is 0 special? Can we compare floats exactly to 0? Or even that is incorrect? Particularly in the context of C# and Java?
double val = 0;
val = getVal();
if(val == 0)
Even though 0 has an exact representation, you can’t rely on the result of a calculation using floats to be exactly 0. As you noted, this is due to floating point calculation and conversion issues.
So, you should test for 0 against your tolerance epsilon.