sta*_*tti 2 c++ floating-point numerical exception nan
通常很难找到NaN的起源,因为它可以在计算的任何步骤发生并传播自身.那么当计算返回NaN或inf时,是否可以使C++程序暂停?我认为最好的是崩溃并出现错误消息:
Foo: NaN encoutered at Foo.c:624
Run Code Online (Sandbox Code Playgroud)
这样的事情可能吗?你有更好的解决方案吗?你如何调试NaN问题?
编辑:精确:我在Linux下与GCC合作.
您无法以完全可移植的方式执行此操作,但许多平台提供了允许您访问浮点状态控制寄存器的C API.
具体来说,您希望取消屏蔽溢出和无效的浮点异常,这将导致处理器在程序中的算术产生NaN或无穷大结果时发出异常信号.
在您的Linux系统上,这应该做的伎俩:
#include <fenv.h>
...
feenableexcept(FE_INVALID | FE_OVERFLOW);
Run Code Online (Sandbox Code Playgroud)
您可能希望学习编写陷阱处理程序,以便在发出其中一个异常信号时打印诊断消息或继续执行.