Fen*_*ang 10 c++ numeric nan complex-numbers exponential
看看代码吹响:
#include <complex>
#include <iostream>
int main()
{
std::cout << std::pow( std::complex<double>(0,0), std::complex<double>(0,0) ) << "\n";
std::cout << std::pow( std::complex<double>(0,0), double(0) ) << "\n";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
g ++(4.8.1)给出了输出
(nan,nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
而clang ++(3.3)给出了一个输出
(-nan,-nan)
(-nan,-nan)
Run Code Online (Sandbox Code Playgroud)
但我期待(1.0,0.0).
任何人都可以解释一下吗?
由幂(exp或iexp)引发的返回值基数.如果base为0且exp小于或等于0,
则会发生域错误.在这种情况下返回NAN.[...]
在你的代码中,你有两个基数为0和exp等于0,因为复数0 + 0 *i仍然是0.所以NaN似乎是预期的.
由@Fred Larson礼貌,并根据std :: pow为std :: complex重载
计算复数x被提升到复数幂y.该操作定义为exp(y·log(x)).沿负实轴存在分支切口. pow(0,0)的结果是实现定义的.