News for hackers. Stuff that matters.
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.
Re:Subtraction is not comparison by marvy on Friday December 26, 2014 @03:03AM (#8798399)
But the only way to account for overflow is to avoid comparison by subtraction.
Re:Subtraction is not comparison by arielby on Friday December 26, 2014 @05:40AM (#8798607)
You can also do the comparison over larger integers, for example

  int cmp(int x, int y) {
    return (int) (((long)x-(long)y)>>32);
  }
Re:Subtraction is not comparison by Sharlin on Friday December 26, 2014 @11:25AM (#8799194)
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.
Re:Subtraction is not comparison by TwoBit on Friday December 26, 2014 @12:10PM (#8799356)
The C99 language standard requires support for long long.
Re:Subtraction is not comparison by dezgeg on Friday December 26, 2014 @10:53PM (#8801625)
But an implementation where sizeof(int) == sizeof(long) == sizeof(long long) is allowed by the specification.
Re:Subtraction is not comparison by marvy on Wednesday December 31, 2014 @03:56AM (#8818655)
On 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.