【发布时间】:2023-04-01 00:58:01
【问题描述】:
我有一个巨大的项目(不是我建造的),它允许有 Infinity 和 NaN 值。尽管这是允许的,但这是不可取的。我read 这些值是由这些操作生成的:
1/0 = ∞
log (0) = -∞
sqrt (-1) = NaN
除此之外,当他们到达时,应该抛出一个FP Exception。
如果我的项目允许对NaN和Infinity进行操作,我认为SIGFPE会在某个地方处理,但我在整个项目中搜索并没有找到。
还有其他方法可以禁用此异常吗?我的目标是能够检测到这些值的第一次出现。
编辑: 我使用的是 Windows,我打算启用信号,但在启用之前,我想了解它是否被禁用。
【问题讨论】:
-
那么除以零的结果应该是什么?
-
“还有其他方法可以禁用此异常吗?我的目标是能够检测到这些值的第一次出现。” 这不是说您实际上想要启用这个异常吗?
-
我不确定我是否理解正确:您是否希望抛出 SIGFPE?我正在使用 GCC,在我的安装中,它没有被抛出,而且我(还)找不到启用它的方法。
-
你在什么操作系统上运行?
-
来自您提到的 GCC 文档:当异常发生时(在引发异常时,以标准的语言),可能会发生以下两种情况之一。默认情况下,异常只是简单地在浮点状态字中注明,程序继续进行,就好像什么都没发生一样。该操作会产生一个默认值,这取决于异常 [...])。您的程序可以检查状态字以找出发生了哪些异常。