LINUX.ORG.RU

История изменений

Исправление V1KT0P, (текущая версия) :

ну хорошо, может быть N+N-1

Нет, все же N+N.

Результат умножения числа разрядностью M на число разрядностью N укладывается в разрядность M+N.

Все ты верно сказал что N+N гарантирует отсутствие переполнения, но иногда можно получить результат длиной N+N-1. Из-за этого если к примеру сумма длин битов будет 513 бит, то результат умножения может быть как 512 бит так и 513 бит. Поэтому нельзя на вот этом пограничном случае однозначно сказать есть переполнение или нет, иначе можно было бы сделать функцию для проверики будет переполнение или нет.

Для демонстрации такой ситуации:

0b11111 - 5 бит.
0b1111 - 4 бита.
0b11111 * 0b1111 = 0b111010001 - 9 бит.

0b10000 - 5 бит.
0b1000 - 4 бита.
0b10000 * 0b1000 = 0b10000000 - 8 бит.

Исходная версия V1KT0P, :

ну хорошо, может быть N+N-1 Нет, все же N+N. Результат умножения числа разрядностью M на число разрядностью N укладывается в разрядность M+N.

Все ты верно сказал что N+N гарантирует отсутствие переполнения, но иногда можно получить результат длиной N+N-1. Из-за этого если к примеру сумма длин битов будет 513 бит, то результат умножения может быть как 512 бит так и 513 бит. Поэтому нельзя на вот этом пограничном случае однозначно сказать есть переполнение или нет, иначе можно было бы сделать функцию для проверики будет переполнение или нет.

Для демонстрации такой ситуации:

0b11111 - 5 бит.
0b1111 - 4 бита.
0b11111 * 0b1111 = 0b111010001 - 9 бит.

0b10000 - 5 бит.
0b1000 - 4 бита.
0b10000 * 0b1000 = 0b10000000 - 8 бит.