feholdexcept等有什么用?

时间:2011-06-12 13:36:05

标签: c exception floating-point signals fenv

所有fenv.h的文档(在标准中)相当令人困惑,但我对feholdexcept和浮点异常的“不停止模式”的概念特别困惑。据我所知,在任何IEEE浮点实现中,默认情况下异常都是非信令/“不停止”,并且fenv.h接口似乎无法启用信令模式,除非它是默认。 feholdexcept的整个概念是否无用,除非在非IEEE系统或具有非标准扩展的系统上设置信令异常掩码?

1 个答案:

答案 0 :(得分:6)

假设您正在实现一个库,并且在调用代码之前,您不知道调用者可能会对浮点环境执行什么操作。它们可能会取消屏蔽异常,并安装一个自定义陷阱处理程序,该处理程序会导致除零以产生值42.假设您的库依赖于具有默认的IEEE-754行为(除零)。 feholdexcept函数为您提供了强制执行此行为的方法。然后可以使用fesetenv函数恢复调用者的环境以及未屏蔽的异常。

这无疑是一个相当模糊的使用角落,但坦率地说fenv.h中的所有对于大多数程序员来说都是相当模糊的。