Description
In the original PR for overflow_check_conditional
, I found this comment suggesting checks for subtraction: #741 (comment)
I agree with linting a - b > a
-- there's no way for this to be true without underflow. You can also look at this algebraically, where this simplifies to 0 > b
, which is nonsense for an unsigned type.
I disagree with linting a - b > b
-- if you already know that a - b
won't underflow (from a separate test or precondition), then this is a legitimate way of testing a > 2 * b
, with the benefit of avoiding potential overflow in 2 * b
.
One could alternately write this as a > b.saturating_mul(2)
or a > b.saturating_add(b)
, but I tried this in one of my Project Euler solutions, and it was measurably slower. Even a raw a > 2 * b
was slower than a - b > b
!
Thoughts?