Shouldn't you write
return (long)x + y;
to ensure the addition happens after the conversion to long? return (long)x + y;
to ensure the addition happens after the conversion to long?Simple addition will fail if the result of the expression should fall outside the range of integers expressible for a given integer width—because it can't fit. That's not insightful. It's facile. The criticism of the naive midpoint computation is not facile.
The problem with using `(low + high) / 2` to compute the midpoint (instead of `(high - low) / 2 + low`) is that it will give invalid results even when the data type from the signature is wide enough that the expected result can fit.
On most 64-bit UNIX-like systems, long is the same with long long.