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);