if (x + y < x) // addition overflows
if (x - y > x) // subtraction underflows
if ((b > 0 && a > INT_MAX - b) || (b < 0 && a < INT_MIN - b)) // addition overflows
if ((b > 0 && a < INT_MIN + b) || (b < 0 && a > INT_MAX + b)) // subtraction underflows
f ((y > 0 && x < INT_MIN + y) || (y < 0 && x > INT_MAX + y)) {
// error
} else {
delta = abs(x - y);
}
int chkadd(int a, int b)
{
if(b < 0)
return chksub(a,-b);
else
if(INT_MAX - b < a)
{
fputs("int overflow\n", stderr);
return INT_MAX;
}
return a + b;
}