C++ C++;标准::复杂<&燃气轮机;NAN、INF的数据类型测试(不收敛)
我希望测试对复数(std::complex)的操作是否会产生+/-INF或NAN结果。(非收敛结果。) 例如,在映射z->z*z+c下 对于float或double数据类型,我相信可以使用x!=x来测试NAN。我不确定这是否适用于+/-INF.使用。如果此函数的输入既不是C++ C++;标准::复杂<&燃气轮机;NAN、INF的数据类型测试(不收敛),c++,math,double,nan,C++,Math,Double,Nan,我希望测试对复数(std::complex)的操作是否会产生+/-INF或NAN结果。(非收敛结果。) 例如,在映射z->z*z+c下 对于float或double数据类型,我相信可以使用x!=x来测试NAN。我不确定这是否适用于+/-INF.使用。如果此函数的输入既不是nan也不是inf,则返回true。您还可以使用std::isnan和std::isinf检查这些特定属性 编辑:对于std::complex,可以对real和imag零件应用相同的检查。您也可以简单地将其应用于std::com
nan
也不是inf
,则返回true。您还可以使用std::isnan
和std::isinf
检查这些特定属性
编辑:对于std::complex
,可以对real
和imag
零件应用相同的检查。您也可以简单地将其应用于std::complex
对象的abs
。不要使用此测试:
std::abs(z) > std::numeric_limits<double>::max()
isfinite(z)
z - z != complex<double>(0)
您可以使用此测试:
std::abs(z) > std::numeric_limits<double>::max()
isfinite(z)
z - z != complex<double>(0)
z-z!=复杂(0)
如果
z
有两个有限分量,那么z-z
有两个零分量,并且将与0
进行比较。如果z
至少有一个无限或NaN分量,则z-z
的分量将为NaN。NaN比较=代码>到所有东西,包括0
和它本身。类似于z.abs()>std::numeric\u limits::max()
,也许?@igortandtnik会起作用还是只是猜测?(无论哪种方式都很有用,但我想更确定一点。)我相当肯定它会起作用,但我还没有尝试过。x-x!=0将告诉您是否有有限的东西。这同样适用于complex
和complex
@IgorTandetnik:你的意思是!(z.abs()>std::numeric_limits::max()
,但请注意它很容易溢出。std::complex呢?我想可以传递复数的模数?@user3728501是的,abs
将是最安全的。如果您需要再推一点,您可以停止检查real
和imag
。@tmyklebu这是因为abs()我认为它只适用于整数参数。我认为它只适用于与旧C程序的向后兼容性,或者只用于清除符号位。@user3728501:complex的abs
重载问题是有一个有限的complex
的abs
是无限的。