Numeric comparison difficulty in R
comparison, comparison-operators, floating-point, r, r-faq
Solution
I've never been a fan of `all.equal` for such things. It seems to me the tolerance works in mysterious ways sometimes. Why not just check for something greater than a tolerance less than 0.05
tol = 1e-5
(a-b) >= (0.05-tol)
In general, without rounding and with just conventional logic I find straight logic better than all.equal
If `x == y` then `x-y == 0`. Perhaps `x-y` is not exactly 0 so for such cases I use
abs(x-y) <= tol
You have to set tolerance anyway for `all.equal` and this is more compact and straightforward than `all.equal`.
Problem
I'm trying to compare two numbers in R as a part of a if-statement condition: `(a-b) >= 0.5` In this particular instance, a = 0.58 and b = 0.08... and yet `(a-b) >= 0.5` is false. I'm aware of the dangers of using `==` for exact number comparisons, and this seems related: `(a - b) == 0.5)` is false, while `all.equal((a - b), 0.5)` is true. The only solution I can think of is to have two conditions: `(a-b) > 0.5 | all.equal((a-b), 0.5)`. This works, but is that really the only solution? Should I just swear off of the `=` family of comparison operators forever? Edit for clarity: I know that this is a floating point problem. More fundamentally, what I'm asking is: what should I do about it? What's a sensible way to deal with greater-than-or-equal-to comparisons in R, since the `>=` can't really be trusted?