所有fenv.h
的文档(在标准中)相当令人困惑,但我对feholdexcept
和浮点异常的“不停止模式”的概念特别困惑。据我所知,在任何IEEE浮点实现中,默认情况下异常都是非信令/“不停止”,并且fenv.h
接口似乎无法启用信令模式,除非它是默认。 feholdexcept
的整个概念是否无用,除非在非IEEE系统或具有非标准扩展的系统上设置信令异常掩码?
答案 0 :(得分:6)
假设您正在实现一个库,并且在调用代码之前,您不知道调用者可能会对浮点环境执行什么操作。它们可能会取消屏蔽异常,并安装一个自定义陷阱处理程序,该处理程序会导致除零以产生值42.假设您的库依赖于具有默认的IEEE-754行为(除零)。 feholdexcept
函数为您提供了强制执行此行为的方法。然后可以使用fesetenv
函数恢复调用者的环境以及未屏蔽的异常。
这无疑是一个相当模糊的使用角落,但坦率地说fenv.h
中的所有对于大多数程序员来说都是相当模糊的。