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

问题描述 投票:1回答:2

我希望测试复数(std :: complex)上的操作是否会导致+/- INF或NAN结果。 (非收敛结果。)

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

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

c++ math double nan
2个回答
2
投票

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

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


0
投票

不要使用此测试:

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和它自己。

© www.soinside.com 2019 - 2024. All rights reserved.