C++ 检查复数是否为NaN

C++ 检查复数是否为NaN,c++,std,borland-c++,C++,Std,Borland C++,我试图检查一个由傅里叶变换(使用)产生的std::complex数字在实部或imag部分是否包含NaN 我使用Borland C++,所以我不能访问 STD::ISNAN < /COD>。我已尝试通过将数字与自身进行比较来检查该数字是否为NaN: (n.imag() != n.imag()) 但是,只要调用n.imag()或std::imag(n),就会得到一个“浮点无效操作” 是否有任何方法验证std::complex是否良好;如果它包含一个NaN?这在g++上有效: #include<

我试图检查一个由傅里叶变换(使用)产生的
std::complex
数字在实部或imag部分是否包含
NaN

我使用Borland C++,所以我不能访问<代码> STD::ISNAN < /COD>。我已尝试通过将数字与自身进行比较来检查该数字是否为

NaN

(n.imag() != n.imag())
但是,只要调用
n.imag()
std::imag(n)
,就会得到一个“浮点无效操作”

是否有任何方法验证std::complex是否良好;如果它包含一个
NaN

这在g++上有效:

#include<iostream>
#include<cmath>
#include<complex>

int main(){

  double x=sqrt(-1.);
  std::complex<double> c(sqrt(-1.), 2.);

  std::cout<<x<<"\n";
  std::cout<<c<<"\n";

  std::cout<< ( (c!=c) ? "yup" : "nope" )<<"\n";
}
#包括
#包括
#包括
int main(){
双x=sqrt(-1.);
标准:复合物c(sqrt(-1.),2.);

std::cout在
math.h
中是否有
fpclassify()
?对于NAN,它应该返回
FP\u NAN
。或者更好地使用
isnan()
。如果没有此类函数/宏,您可以查看浮点或双精度的二进制表示形式,并手动检查是否存在NaN。有关详细信息,请参阅IEEE-754单精度和双精度格式。

我发现Borland有自己的数学库。因此,如果您想避免浮点错误,请使用Borlands math中的IsNan


float.h
标题

int _isnan(double d);
如果传入的值是NaN,则返回一个非零值(
TRUE
),否则返回
0
FALSE


返回指示其参数的浮点类的整数值。可能的值在FLOAT.H(NaN、INF等)中定义

如果编译器不支持std::isnan,请更改它。纳瓦兹:正在处理它。但是它的代码库很大,我必须同时维护产品。编辑:这很有效。我尝试了这个,下面是输出:+NAN(+NAN,2) nope@dagur:所以它确实起作用了---它确实告诉你对于一个复数是“是”。我遗漏了什么吗?是的,当我意识到:)时,我在编辑我的响应时很慢。实际输出:+NaN(+NaN,2)yupfpcclassify()在STD Borland C++ + UEST中,似乎不存在复数中的NI,我必须在Borland中进行这个破解:给定STD::复合n;双A(N.VyVal[0)];双B(N.Val[1)];IsNan,(a)i iSnNa(b),其中IsNan定义在Math.hpp。
int _fpclass(double __d);