Re:Subtraction is not comparison
by TwoBit on Friday December 26, 2014 @12:11AM
(#8798121)
This isn't a problem with comparison by subtraction, it's a problem with integer overflow. There's nothing wrong with comparison via subtraction if you account for overflow, which you always need to do in programming.
[ Parent
| on HN ]
But the only way to account for overflow is to avoid comparison by subtraction.
You can also do the comparison over larger integers, for example
int cmp(int x, int y) {
return (int) (((long)x-(long)y)>>32);
}In mainstream compilers, even on x64, sizeof(long) == sizeof(int). You need long long instead. Of course, in the general case there's exactly zero guarantee that there even exists an integral type wider than int.
The C99 language standard requires support for long long.
But an implementation where sizeof(int) == sizeof(long) == sizeof(long long) is allowed by the specification.