检查复数是否有NaN

时间:2012-02-21 10:28:22

标签: c++ std borland-c++

我正在尝试检查由{4}变换(使用http://fftw.org/)的std::complex数字在真实或图像部分中是否包含NaN

我正在使用Borland C ++,因此我无法访问std::isnan。我试图通过将数字与自身进行比较来检查数字是否为NaN

(n.imag() != n.imag())

但是,只要我调用n.imag()std::imag(n),我就会收到“浮点无效操作”。

有没有办法验证std::complex是否合适;如果它包含NaN

4 个答案:

答案 0 :(得分:4)

这适用于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";
}

答案 1 :(得分:1)

来自float.h标题

int _isnan(double d);

如果传入的值是NaN,则返回nonzero值(TRUE);否则返回0FALSE)。

int _fpclass(double __d);

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

答案 2 :(得分:0)

fpclassify()中有math.h吗?对于NaN,它应该返回FP_NAN。或者更好的是使用isnan()。如果没有这样的函数/宏,您可以查看浮点数或双精度数的二进制表示,并手动检查NaN。有关详细信息,请参阅IEEE-754单精度和双精度格式。

答案 3 :(得分:0)

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

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/Math_IsNan@Double.html