函数返回-nan

adi*_*ing 1 c++ nan

我有这个代码.为什么它会-nan在主程序中返回一个值时产生?

#include <cstdio>
#include <iostream>
#include <cstdlib>
#include <cmath>

using namespace::std;

float f(float x)
{
    float result = -5 * x * x - 2 * x + 1;
    return powf(result, (float)1/(float)3);
}
int main()
{
    cout<<f(-1)<<endl;
    getchar();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这让我很困惑.据我所知,我使用合适的数据类型.

Liv*_*End 7

当您使用负数调用函数时,base等于-2,指数为1/3(非整数).

根据powf规范:

pow(base,exponent)返回NaN并在基数为有限且负数且指数为有限且非整数时引发FE_INVALID.

这解释了为什么你的函数返回NaN.

如果你想要计算立方根,我建议你改用cbrt.