c ++ 11 быстрые целые числа constexpr

Бить мертвую лошадь здесь. Типичный (и быстрый) способ делать целочисленные полномочия в C это классика:

int64_t ipow(int64_t base, int exp){
  int64_t result = 1;
  while(exp){
    if(exp & 1)
      result *= base;
    exp >>= 1;
    base *= base;
  }
  return result;
}

Однако мне понадобилась целочисленная мощность времени компиляции, поэтому я решил сделать рекурсивную реализацию с помощью constexpr:

constexpr int64_t ipow_(int base, int exp){
  return exp > 1 ? ipow_(base, (exp>>1) + (exp&1)) * ipow_(base, exp>>1) : base;
}
constexpr int64_t ipow(int base, int exp){
  return exp < 1 ? 1 : ipow_(base, exp);
}

Вторая функция предназначена только для обработки показателей меньше 1 предсказуемым образом. Переходяexp

Ответы на вопрос(2)

Ваш ответ на вопрос