gpt4 book ai didi

c++ - 中断 NaN 或 infs

转载 作者:搜寻专家 更新时间:2023-10-31 00:05:40 31 4
gpt4 key购买 nike

通常很难找到 NaN 的来源,因为它可能发生在计算的任何步骤并自行传播。那么是否有可能在计算返回 NaN 或 inf 时让 C++ 程序停止?在我看来,最好的办法是崩溃并显示一条很好的错误消息:

Foo: NaN encoutered at Foo.c:624

这样的事情可能吗?你有更好的解决方案吗?你如何调试 NaN 问题?

编辑:精度:我在 Linux 下使用 GCC。

最佳答案

您无法以完全可移植的方式进行操作,但许多平台提供了 C API,允许您访问浮点状态控制寄存器。

具体来说,您想要取消屏蔽溢出和无效浮点异常,当您的程序中的算术运算产生 NaN 或无穷大结果时,这将导致处理器发出异常信号。

在您的 Linux 系统上,这应该可以解决问题:

#include <fenv.h> 
...
feenableexcept(FE_INVALID | FE_OVERFLOW);

您可能想学习编写陷阱处理程序,以便您可以打印诊断消息或以其他方式在这些异常之一发出信号时继续执行。

关于c++ - 中断 NaN 或 infs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1809381/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com