Like @Exceptyon pointed out, this function is 'relative' to the values you're comparing. The Epsilon * abs(x)
measure will scale based on the value of x, so that you'll get a comparison result as accurately as epsilon
, irrespective of the range of values in x or y.
If you're comparing zero(y
) to another really small value(x
), say 1e-8, abs(x-y) = 1e-8
will still be much larger than epsilon *abs(x) = 1e-13
. So unless you're dealing with extremely small number that can't be represented in a double type, this function should do the job and will match zero only against +0
and -0
.
The function seems perfectly valid for zero comparison. If you're planning to use it, I suggest you use it everywhere there're floats involved, and not have special cases for things like zero, just so that there's uniformity in the code.
ps: This is a neat function. Thanks for pointing to it.