Здравствуйте, rg45, Вы писали:
N>>Поэтому простейший вариант анализа на переполнение без поддержки аппаратуры выглядит примерно так:
[...]
R>Не находишь, что мой вариантАвтор: rg45
Дата: 10.04.12
проще и универсальнее? Универсальнее в том плане, что годится и для знаковых и для беззнаковых типов.
Загнал в автоматический тест — вроде да, отклонений не замечено. Проверка такого рода будет работать.
С другой стороны, надо ещё измерить, какой из этих вариантов эффективнее в каком случае. Визуально для человека твой однозначно проще. Но мне кажется, что для ARM, например, мой соберётся в более короткую и прямую последовательность. Также у тебя проверка на (y>0) избыточна для беззнаковых; если заменить на >= в обеих сторонах, то левая для беззнаковых вырождается в true и экономится операция сравнения, но компилятор может пожаловаться на condition is always true.
R>P.S. Предложил еще позавчера утром, никто и внимания не обратил, обидно
Почему не заметил — не знаю. Видимо, слишком увлёкся опровержением.

Поставил +1 и 2.
Интересно, почему MS в своём SafeInt не использует такие простые приёмы. Вместо этого, например, для двух 32-разрядных чисел они складывают используя 64 бита (причём это даже при компиляции в 32-битный код) и проверяют результат на выход за границы. И вообще у них пример того, как не надо писать на C++...