From deb3247eb0f1daef330602f99f0e81a07fb6b8b2 Mon Sep 17 00:00:00 2001 From: "Lee, Kyutae" Date: Sun, 14 Aug 2022 15:42:46 +0900 Subject: [PATCH] Fix tsub-ok.c Before this fix, tsub_ok(-1, INT_MIN) returned 0, which is not a correct result since (-1) - INT_MIN does not cause overflow. Now this fixed version of tsub_ok returns correct results. --- site/content/chapter2/code/tsub-ok.c | 26 ++++++++------------------ 1 file changed, 8 insertions(+), 18 deletions(-) diff --git a/site/content/chapter2/code/tsub-ok.c b/site/content/chapter2/code/tsub-ok.c index 6a220fa4..b0e9777f 100644 --- a/site/content/chapter2/code/tsub-ok.c +++ b/site/content/chapter2/code/tsub-ok.c @@ -6,26 +6,16 @@ #include /* Determine whether arguments can be substracted without overflow */ -int tsub_ok(int x, int y) -{ - int res = 1; - - (y == INT_MIN) && (res = 0); - // if (y == INT_MIN) res = 0; - +int tsub_ok(int x, int y) { int sub = x - y; - int pos_over = x > 0 && y < 0 && sub < 0; + int pos_over = x >= 0 && y < 0 && sub < 0; int neg_over = x < 0 && y > 0 && sub > 0; - - res = res && !(pos_over || neg_over); - - return res; + return !(pos_over || neg_over); } -int main(int argc, char* argv[]) { - assert(!tsub_ok(0x00, INT_MIN)); - assert(tsub_ok(0x00, 0x00)); - return 0; +int main(int argc, char *argv[]) { + assert(!tsub_ok(0x00, INT_MIN)); + assert(tsub_ok(-1, INT_MIN)); + assert(tsub_ok(0x00, 0x00)); + return 0; } - -