小编End*_*yto的帖子

使用C++中的std :: complex <T>创建复杂的无穷大

我正在尝试创建一个等于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)

c++ nan infinity complex-numbers numeric-limits

14
推荐指数
2
解决办法
1121
查看次数

标签 统计

c++ ×1

complex-numbers ×1

infinity ×1

nan ×1

numeric-limits ×1