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