Всем привет!
Подскажите пожалуйста, как в классическом C++ можно с помощью шаблонов, принципа SFINAE посчитать результат возведения положительного дробного числа в положительную дробную степень во время компиляции.
Общая идея:
a^x = exp(x * ln(a))
В свою очередь ln(a) можно разложить в ряд Тейлора:
ln(a + 1) = [ a / (1!) ] - [ a^2 / (2!) ] + [ a^3 / (3!) ] - ...
Экспонента тоже раскладывается в ряд Тейлора:
exp(p) = 1 + [ p / (1!) ] + [ p^2 / (2!) ] + [ p^3 / (3!) ] + ...
Вроде бы дело не хитрое, надо рекурсивно вызывать шаблоны и все получится. Но в C++ нельзя получить дробные аргументы шаблона.
Собственно вопрос: подскажите как можно обойти это ограничение и таки посчитать a^x в compiletime.