Chris Angelico <[email protected]> writes:
> On Thu, Apr 9, 2015 at 11:57 PM, Alain Ketterlin
> <[email protected]> wrote:
>> Because, in:
>>
>> z = x+y; // all signed ints
>> if ( z < x )
>> ...
>>
>> either there was no overflow (and the condition is false), or there was,
>> and the result is undefined, i.e., "z<x" can be considered false also.
>
> Do you mean "all unsigned ints" here? Because if y is negative, the
> condition will be true without overflow. If you didn't, then I'm
> puzzled as to where the undefined behaviour is coming from.
Ouch, you're right, I tried to stick with Marko's example and forgot the
basics. I meant "signed ints", but the "removable" condition should be
something like:
if ( x>0 && y>0 && z<x )
...
i.e., some condition that is never true (either false or undefined).
Thanks for the correction.
If the variables are all unsigned ints, the potential overflow has a
well-defined meaning, and the code is correct and doesn't trigger
undefined behavior. This was Marko's initial example.
-- Alain.
--
https://mail.python.org/mailman/listinfo/python-list