Заменить значения в матрице другими значениями

Ответ Эндрю Тулуза может быть расширен до деления.

Деление по целочисленным константам подробно рассматривается в книге «Хакерское наслаждение» Генри С. Уоррена ( ISBN 9780201914658).

Первой идеей реализации деления является запись обратного значения знаменателя в базе два.

Например, 1/3 = (base-2) 0.0101 0101 0101 0101 0101 0101 0101 0101 .....

So , a/3 = (a >> 2) + (a >> 4) + (a >> 6) + ... + (a >> 30) для 32-битной арифметики.

Объединяя термины очевидным образом, мы можем уменьшить количество операций:

b = (a >> 2) + (a >> 4)

b += (b >> 4)

b += (b >> 8)

b += (b >> 16)

Есть более интересные способы вычисления деления и остатков.

EDIT1:

Если OP означает умножение и деление произвольных чисел, а не деление на постоянное число, то этот поток может быть полезен: https://stackoverflow.com/a/12699549/1182653

EDIT2:

Один из самых быстрых способов разделить на целочисленные константы - использовать модульную арифметику и сокращение Монтгомери: Что такое t он самый быстрый способ разделить целое на 3?

13
задан Andrey Rubshtein 14 August 2012 в 12:16
поделиться