C++ NAN、INF(非收敛)的 std::complex<> 数据类型测试

C++ std::complex<> data type test for NAN, INF (non-convergence)

本文关键字:complex 测试 数据类型 lt std gt INF NAN C++      更新时间:2023-10-16

我想测试对复数(std::complex)的运算是否会产生+/-INF或NAN结果。(非收敛结果。)

例如在映射z->z*z+c.下

对于float或double数据类型,我相信可以使用x!=x测试NAN。我不确定这是否适用于+/-INF。

使用std::isfinite。如果此函数的输入既不是nan也不是inf,则返回true。您也可以使用std::isnanstd::isinf来检查这些特定属性。

编辑:对于std::complex,可以对realimag零件应用相同的检查。您也可以简单地将它应用于std::complex对象的abs

不要使用此测试:

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及其自身。