我能找到的唯一文档(在MSDN或其他方面)是对_fpreset()
的调用“重置浮点包。”什么是“浮点包?”这是否也清除了FPU状态字?我看到在从SIGFPE恢复时要调用_fpreset()
的文档,但是_clearfp()
也没有这样做?我需要同时打电话吗?
我正在开发一个取消屏蔽某些FP异常的应用程序(使用_controlfp()
)。当我想将FPU重置为默认状态时(例如,在调用.NET代码时),我应该只调用_clearfp()
,_fpreset()
或两者。这是性能关键代码,所以如果我不需要,我不想同时调用这两个代码......
答案 0 :(得分:3)
_fpreset()
重置浮点单元的状态。它将FPU精度重置为默认值,清除FPU状态字。我看到使用它的两个偶然事件是从FPE中恢复时(如你所说)以及从库代码中获取控制权(例如,你无法控制的DLL)以任何方式拧紧FPU,比如更改精度。