krisher
Apr 13 2015, 13:16
Здравствуйте, коллеги.
Никак не могу сообразить алгоритм определения переполнения при сложении нескольких (более 2х) чисел в дополнительном коде.
Подскажите, пожалуйста.
каждое сложение двух чисел одной разрядности = +1 бит. дальше тривиально.
krisher
Apr 13 2015, 13:44
это понятно. вопрос в том, как потом определить случилось ли переполнение или просто перенос
Если есть перенос из суммы в знак, но нету переноса из знака: переполнение в отрицательную сторону. Ну и обратно.
krisher
Apr 13 2015, 13:59
а как это посчитать для n чисел?
ищите по ключевым "схема ускоренного переноса" или "сarry-lookahead adder"
Не определен тип процессора.
На универсальных процессорах задачу придется решать программно.
А DSP должны иметь специальный флаг переполнения (у ADSP-21XX это AV,MV). При этом если AV=1 и нет переноса, то переполнение в положительную сторону, есть перенос - в отрицательную. Там же реализован и режим насыщения (автоматическая замена результата максимальным по модулю числом при возникновении переполнения).
krisher
Apr 14 2015, 10:05
спасибо всем, вроде разобрался.
Цитата(V_G @ Apr 14 2015, 08:49)

Не определен тип процессора.
На универсальных процессорах задачу придется решать программно.
А DSP должны иметь специальный флаг переполнения (у ADSP-21XX это AV,MV). При этом если AV=1 и нет переноса, то переполнение в положительную сторону, есть перенос - в отрицательную. Там же реализован и режим насыщения (автоматическая замена результата максимальным по модулю числом при возникновении переполнения).
На самом деле большинство универсальных процессоров аппаратно определяет возникновение переполнения.
Цитата(des00 @ Apr 13 2015, 20:37)

каждое сложение двух чисел одной разрядности = +1 бит. дальше тривиально.
Точнее так для общего случая: +ceil(log2(N_add)) бит. Т.е. если заранее известно, что будут складываться 4 числа, то разрядность надо увеличить не на 4 бита, а всего на 2.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.