У меня есть положительное постоянное значение, которое исходит из другой библиотеки, чем моя, назовите ее the_val
. Теперь я хочу, чтобы log_of_the_val
был напольным (log_2 (the_val)) - не говоря ни слова в коде C++ - и я хочу, чтобы это произошло во время компиляции, конечно.Каков правильный способ вычисления интегральных логарифмов base-2 во время компиляции?
Теперь, с помощью GCC, я мог бы сделать что-то вроде
decltype(the_val) log_of_the_val = sizeof(the_val) * CHAR_BIT - __builtin_clz(the_val) - 1;
и что должно работать, я думаю (длина - число нулей товарной позиции). В противном случае я мог бы реализовать для себя функцию constexpr, но я уверен, что есть что-то еще, более простое и портативное, которое я мог бы использовать во время компиляции. ... вопрос в том, что бы это было?
@IlyaPopov: Да. – einpoklum