我正在尝试检查由{4}变换(使用http://fftw.org/)的std::complex
数字在真实或图像部分中是否包含NaN
。
我正在使用Borland C ++,因此我无法访问std::isnan
。我试图通过将数字与自身进行比较来检查数字是否为NaN
:
(n.imag() != n.imag())
但是,只要我调用n.imag()
或std::imag(n)
,我就会收到“浮点无效操作”。
有没有办法验证std::complex
是否合适;如果它包含NaN
?
答案 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
);否则返回0
(FALSE
)。
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。