Giff wrote:
> Since I know that it is impossible to check if the value I pass is equal
> to zero (being a float), I don't perform any check on that value.
What do you mean it's "impossible"? Of course it's not impossible.
I think you have understood the nature of floating point values
wrongly. Floating point values are not some kind of fuzzy quantum
states which you can't really measure with accuracy and which hover
erratically around some value, never being exactly anything.
Floating point values are a deterministic and welldefined group of
bits. You might not be able to represent all possible rational values
with them (such as 0.1) but that doesn't mean you can't represent any
values with exact accuracy. For example integers can be represented
with exact accuracy up to a rather big value (to something like 2^51
or such when using doubleprecision floating point, a fact which often
surprises many people).
Thus this should work just fine:
double d = 0;
if(d == 0) { it's 0 }
Of course a completely different story is whether certain mathematical
expressions which should give 0 as result really give that, or if
rounding errors kick in along the way making the result just slightly
off target.
For example (0.5+0.51) should give exactly 0, but (0.9+0.11) might
not (because 0.9 and 0.1 cannot be represented accurately).
And then there's the issue, of course, that dividing by a value which
is very close to 0 (even if it's not supposed to be exactly 0 in the
first place) might give a result which is too large.
What you can do is to check if the value is very close to 0 and
act accordingly.
