C++ NAN、INF(非收敛)的 std::complex<> 数据类型测试
C++ std::complex<> data type test for NAN, INF (non-convergence)
我想测试对复数(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
零件应用相同的检查。您也可以简单地将它应用于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
及其自身。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- <T> 通过模板化运算符重载将 std::complex 乘以双倍
- 用于交叉编译和CMake的预处理器宏的单元测试
- 谷歌测试中的期望值存储在哪里
- 如何在for循环中包含两个索引值的测试条件
- 在cygwin中测试新的boost安装时出现cpp错误
- C++ NAN、INF(非收敛)的 std::complex<> 数据类型测试