为什么和何时应该调用_fpreset()?

5 c++ floating-point visual-c++

我可以找到的唯一文档(在MSDN上还是其他版本上)是对_fpreset()“重置浮点程序包” 的调用。什么是“浮点软件包”?这还会清除FPU状态字吗?我看到_fpreset()从SIGFPE恢复时要调用的文档,但这样_clearfp()做还不行吗?我需要同时打电话吗?

我正在开发一个可揭露某些FP异常(使用_controlfp())的应用程序。当我想重置FPU为默认状态(比如,打电话给.NET代码的时候),我是否应该打电话_clearfp()_fpreset()两者。这是对性能至关重要的代码,因此如果不需要,我不想两者都调用。

F'x*_*F'x 3

_fpreset()重置浮点单元的状态。它将 FPU 精度重置为其默认值清除 FPU 状态字。我看到使用它的两种情况是从 FPE 恢复时(如您所说)以及从以任何方式破坏 FPU 的库代码(例如您无法控制的 DLL)恢复控制时,例如更改精确。