Можете ли вы предварительно рассчитать таблицу степеней 2, используя шаблоны

Когда я задал вопрос, в котором говорится, что является самым быстрым способом определения степеней 2, я получил ответ «предварительно рассчитать их и использовать справочную таблицу».

Как я могу предварительно рассчитать таблицу степеней 2, используя шаблоны?

Ссылка на мой предыдущий вопрос: Лучший способ найти силы 2

1

Решение

Вот идея:

constexpr std::array<unsigned long long, 16> LUT = {
1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 };
4

Другие решения

template <int N>
struct pow2
{
enum { value = 2 * pow2<N - 1>::value };
};

template <>
struct pow2<0>
{
enum { value = 1 };
};

void foo()
{
const int x = pow2<4>::value; // == 16
const int y = pow2<0>::value; // == 1
int arr[x] = {0}; // Because x is constant
}

Живой код здесь

Тем не менее я бы предпочел 1U << n над pow2<n>::value если нет убедительных доказательств снижения производительности.

2

По вопросам рекламы [email protected]