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, когда основание отрицательно?
Обновление — всегда будет класс результатов, которые можно выразить только с помощью комплексных чисел.
Это не ожидаемое значение. Ожидаемое значение — комплексное число 0.998 + 0.725i
, Если вы определите a
а также b
как std::complex<double>
это будет работать.
Других решений пока нет …