我能找到的唯一文档(在 MSDN 或其他地方)是对 _fpreset()
的调用“重置浮点包”。什么是“浮点包”?这是否也清除了 FPU 状态字?我看到文档说在从 SIGFPE 恢复时调用 _fpreset()
,但是 _clearfp()
不是也这样做吗?我需要同时调用两者吗?
我正在开发一个应用程序来揭露一些 FP 异常(使用 _controlfp()
)。当我想将 FPU 重置为默认状态时(例如,调用 .NET 代码时),我应该只调用 _clearfp()
、_fpreset()
还是 < em>两者。这是性能关键代码,所以如果不需要的话,我不想同时调用这两个代码......
最佳答案
_fpreset()
重置浮点单元的状态。它将 FPU 精度重置为默认值并清除 FPU 状态字。我看到使用它的两个场合是从 FPE 恢复时(如您所说)和从以任何方式破坏 FPU 的库代码(例如您无法控制的 DLL)恢复控制时,例如更改精度。
关于c++ - 为什么以及何时应调用 _fpreset()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2231504/