Change the computation of ULP distance to detect overflow.

Relies on [UB](https://www.youtube.com/watch?v=9bZkp7q19f0).
GCC for instance will optimize the check away, I don't know what clang does, some implementations trap.
We could do the addition unsigned, and check the result, but the following would be more readable:
```cpp
std::int64_t d_1 = ULPDistance(positive, +0.0);
std::int64_t d_2 = ULPDistance(negative, -0.0);
if (d_1 > std::numeric_limits<std::int64_t>::max() - d_2) {
  return std::numeric_limits<std::int64_t>::max();
} else {
  return d_1 + d_2;
}
```
Note that the above relies on both operands being natural. If these checked operations are needed again, it is not hard to generalize and templatize this, and to move it to `base`.