Неожиданный результат в Bitwise-хаке для модульного сложенияPython

Программы на Python
Anonymous
Неожиданный результат в Bitwise-хаке для модульного сложения

Сообщение Anonymous »

Я смотрел видео MIT OCW о битовых хаках и наткнулся на метод модульного сложения, который, кажется, дает неожиданный результат (Видео с TimeStamp)
. Метод описывается следующим образом:
Модульное сложение: (x + y) % n
Логическая формула:

Код: Выделить всё

z = x + y
r = z - (n & - (z >= n))
Вот как я реализовал код:

Код: Выделить всё

x = 10  # 1010
y = 5   # 0101
z = x + y # 1111
n = 6   # 0110
r = z - (n & -(z>=n))   # 1001
print(r)
Я ожидал, что результат
(10+5) по модулю 6 будет 3, но вычисление возвращает 9.
И что действительно ли выражение r = z - (n & -(z >= n)) вычисляется, и могу ли я изменить этот подход для правильного вычисления
(𝑥+𝑦)mod 𝑛 ?

Существуют ли какие-либо другие эффективные побитовые методы модульной арифметики, о которых мне следует знать?

Подробнее здесь: https://stackoverflow.com/questions/790 ... -adddition

Вернуться в «Python»