7 ms·
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
by TwoBit 12y ago
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.
- marvy 12y agoBut the only way to account for overflow is to avoid comparison by subtraction.
- arielby 12y agoYou can also do the comparison over larger integers, for example int cmp(int x, int y) { return (int) (((long)x-(long)y)>>32); }
- Sharlin 12y agoIn 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.
- TwoBit 12y agoThe C99 language standard requires support for long long.
- dezgeg 12y agoBut an implementation where sizeof(int) == sizeof(long) == sizeof(long long) is allowed by the specification.
- marvy 12y agoOn a (slightly) more practical level: there exists some largest integer type. You may someday need to sort it. If you want your sort to always work, you can't afford to overflow.