Pow-подобная функция для отрицательного базового случая
std::pow подходит для большинства комбинаций значений базы и экспоненты.
Однако, когда основание является отрицательным и дробным, std::pow перестает работать.
В приведенном ниже примере возвращается NaN (в соответствии с определением), когда ожидаемое значение примерно равно: -1.2332863005546
#include <cmath>
#include <cstdio>
int main()
{
double a = -1.1;
double b = 2.2;
double c = std::pow(a,b);
printf("%5.2f ^ %5.2f = %25.10f\n",a,b,c);
return 0;
}
Мой вопрос: есть идеи о том, как разработать общую функцию pow, которая возвращает значения, отличные от NaN, когда основание отрицательно?
Обновление - всегда будет класс результатов, которые можно выразить только с помощью комплексных чисел.
1 ответ
Решение
Это не ожидаемое значение. Ожидаемое значение - комплексное число 0.998 + 0.725i
, Если вы определите a
а также b
как std::complex<double>
это будет работать.