在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).现场观看.
| 归档时间: |
|
| 查看次数: |
566 次 |
| 最近记录: |