pow(-0.857487,1.5)返回NaN - 替代品?

1 c++ nan pow

在C++中,当我尝试pow(-0.857487, 1.5)它时返回nan.我发现这是由于溢出造成的.

math.pow()或任何其他计算此值的方法有替代方法吗?

Bau*_*gen 12

手头的问题不是任何溢出,而是pow(-0.857487, 1.5) = -0.857487 ^ 3/2 = sqrt(-0.857487)^3 = -0.794038... i(简化演示数学)的结果不是实数.

一般来说,pow(a,b)在负数a和非整数的实数中不存在b.a然而,对于积极的,pow(a,b)总是存在并且是真实的,所以如果你只使用实数,你可能想要类似的东西pow(abs(a),b).

如果复杂的算术实际上是你想要的,你可以使用std::complex:

#include <iostream>
#include <complex>

int main () {
    std::complex<double> d = -0.857487;
    std::cout << std::pow(d, 1.5);
}
Run Code Online (Sandbox Code Playgroud)

输出:(-1.45862e-16,-0.794038).现场观看.