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; }