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> это будет работать.

Другие вопросы по тегам