我希望测试复数(std :: complex)上的操作是否会导致+/- INF或NAN结果。 (非收敛结果。)
例如,在映射z - > z * z + c下。
对于float或double数据类型,我相信可以使用x!= x来测试NAN。我不确定这是否适用于+/- INF。
使用std::isfinite
。如果输入既不是nan
也不是inf
,则此函数返回true。您还可以使用std::isnan
和std::isinf
来检查这些特定属性。
编辑:对于std::complex
,您可以对real
和imag
部分应用相同的检查。你也可以简单地将它应用于abs
对象的std::complex
。
不要使用此测试:
std::abs(z) > std::numeric_limits<double>::max()
这将无法检测某些有限复数,例如complex<double>(DBL_MAX, DBL_MAX)
。对于z
具有NaN成分的情况,比较也将失败。
std::isfinite
似乎没有复杂的重载,所以你不能使用这个测试:
isfinite(z)
你可以使用这个测试:
z - z != complex<double>(0)
如果z
有两个有限分量,那么z - z
有两个零分量,并且将比较等于0
。如果z
至少有一个无限或NaN成分,则z - z
的那个成分将是NaN。 NaN将!=
与一切进行比较,包括0
和它自己。