Изучаю С. Встретил такой вопрос, и никак не могу понять код, предлагаемый в качестве решения.
Есть три int'a (a, b, limit). Сумма 'a' и 'b' не должна быть больше limit, в противном случае 'a' должен быть таким, что a+b=limit. Предлагается такой вариант решения:
if (b < 0)
{
if (limit <= INT_MAX + b)
if (limit - b < a)
a = limit - b;
} else {
if (limit < INT_MIN + b)
goto end;
if (limit - b < a)
a = limit - b;
}
Т.е. судя по всему пытаются определить чтобы не было переполнения a+b? Как я понимаю, нельзя делать просто так: if (a+b > limit) ... по причине возможного переполнения?
И в чем польза от «if (limit <= INT_MAX + b)» (я в курсе что такое INT_MAX/MIN, но в чем их смысл здесь в данном случае)?