Re[4]: Проверка выполнения сложения
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 12.04.12 06:27
Оценка: 1 (1) +1
Здравствуйте, 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++...
The God is real, unless declared integer.
integer overflow
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.