在C ++中以数字代码为基础的计算中发信号或捕获'nan'

hAc*_*oCk 5 c++ debugging exception-handling nan numerical-methods

我们有用C ++编写的数字代码。很少但在某些特定输入下,某些计算会得出“ nan”值。

是否存在一种标准或推荐的方法,当某些数值计算导致生成“ nan”时,我们可以通过该方法停止并提醒用户?(在调试模式下)鉴于矩阵和向量的尺寸很大,检查每个结果是否等于'nan'似乎不切实际。

标准数值库如何处理这种情况?你能对此有所启发吗?

小智 -1

使用启用 -ffast-math 优化的 g++ 测试 f!=f 可能会出现问题:Checking if a double (or float) is NaN in C++

唯一万无一失的方法是检查位模式。

至于在哪里实施检查,这实际上取决于计算的具体情况以及 Nan 错误的频率,即持续受污染计算与在某些阶段进行检查的性能损失。