2015-08-03 6 views
0

Я пытаюсь выполнить очень быстрые операции MOD. Я видел несколько страниц, которые мы можем сделать в качестве альтернативы для вычисления MOD с использованием оператора AND с (Divisor-1). Например .:Как быстро вычислить MODULUS для делителя больше 8, 16, 32

результат = (100 по модулю 8) такое же, как результат = (100, 7)

Он функционирует идеально, если делитель меньше, чем 8 бит, но если вычислить (1245 мод 67), мы можем видеть, что результат отличается от (1245 и 66).

Итак, как я могу рассчитать это быстрее, чем с помощью оператора MOD, предоставляемого языком VB.NET?

Спасибо!

+1

Этот метод расчета MOD работает для 2^n, но я не считаю, что он работает для не-2 (например, 8 MOD 6 = 2, но 8 AND 5 = 0). –

+1

Вы уверены, что в операторе MOD есть узкое место в производительности? –

+0

Благодарим за ответы. Если мы рассмотрим положительные числа 2^N, да, у нас есть хорошее улучшение, связанное с MOD. Но так как наконечник просто функционирует для «мощности 2» чисел, я должен рассматривать инструкцию MOD как значение по умолчанию. –

ответ

2

Использование поразрядного AND работает только для модулей с мощностью 2 (и только положительных). Он не работает для других чисел. См. this link

Я думаю, что оператор модуля, встроенный в структуру, работает быстро, и вы, вероятно, не сможете его улучшить.

0

Ну, 100 mod 8 = 100 and 7 работает, потому что 7 является двоичным 111b.

Независимо от вашего номера (100 десятичных знаков - 1100100b), последние 3 двоичных разряда (бит) сохраняются из-за 111b. Для 100, это было бы 100b = 4.

Теперь рассмотрим, что вы сделали попытку с 1245 мод 67.

1245 является двоичным 10011011101b.

67 является двоичным кодом 1000011b.

Вы видите, почему это не работает?

 Смежные вопросы

  • Нет связанных вопросов^_^