我正在尝试创建一个等于Inf + Inf*j的复数无穷大,其中j是复数变量.当我这样做:
#include <complex>
#include <limits>
using std;
...
complex<double> attempt1 =
complex<double>( numeric_limits<double>::infinity(),
numeric_limits<double>::infinity() );
Run Code Online (Sandbox Code Playgroud)
返回复数(NaN + Inf*j).
但
complex<double> attempt2 =
complex<double>( numeric_limits<double>::infinity() );
Run Code Online (Sandbox Code Playgroud)
返回复数(Inf + 0*j).
另外:
complex<double> attempt_at_imag_inf =
complex<double>(any_value_here, numeric_limits<double>::infinity());
Run Code Online (Sandbox Code Playgroud)
返回复数(NaN + Inf*j).
有谁知道这里发生了什么?任何时候我试图为想象的部分提供信息,那么NaN就写在真实的部分上.
以上仅适用于支持NaN和Infinity的类型.我正在使用g ++ v4.6.1.我查看了numeric_limits标题,并没有迹象表明上面应该发生.
为了将上述内容置于上下文中,我实际上是在对numeric的一个部分特殊化中执行上述操作.非常感谢您考虑这个问题.
修改原始邮政
我正在提供一个完整但很短的程序来说明问题.我还提供了一些关于如何编译程序以生成结果的更多合格信息.
#include <iostream>
#include <complex>
#include <limits>
using namespace std;
int main(int argc, char* argv[])
{
complex<double> my_complex_inf =
complex<double>(numeric_limits<double>::infinity(),
numeric_limits<double>::infinity());
cout << "my_complex_inf = " << my_complex_inf << endl;
complex<double> attempt2 =
complex<double>( numeric_limits<double>::infinity() …Run Code Online (Sandbox Code Playgroud)