int x = n / 3; // <-- make this faster // for instance int a = n * 3; // <-- normal integer multiplication int b = (n << 1) + n; // <-- potentially faster multiplication
Подход таблицы поиска также был бы быстрее в некоторых архитектурах.
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]; }
Простое вычисление ... не более n итераций, где n - ваше количество битов:
uint8_t divideby3(uint8_t x) { uint8_t answer =0; do { x>>=1; answer+=x; x=-x; }while(x); return answer; }