Какой самый быстрый способ делить целое число на 3? - PullRequest
31 голосов
/ 05 октября 2008
int x = n / 3;  // <-- make this faster

// for instance

int a = n * 3; // <-- normal integer multiplication

int b = (n << 1) + n; // <-- potentially faster multiplication

Ответы [ 12 ]

0 голосов
/ 17 июля 2013

Подход таблицы поиска также был бы быстрее в некоторых архитектурах.

uint8_t DivBy3LU(uint8_t u8Operand)
{
   uint8_t ai8Div3 = [0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, ....];

   return ai8Div3[u8Operand];
}
0 голосов
/ 09 мая 2013

Простое вычисление ... не более n итераций, где n - ваше количество битов:

uint8_t divideby3(uint8_t x)
{
  uint8_t answer =0;
  do
  {
    x>>=1;
    answer+=x;
    x=-x;
  }while(x);
  return answer;
}
...