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

时间:2010-02-09 18:35:33

标签: c++ visual-c++ floating-point

我能找到的唯一文档(在MSDN或其他方面)是对_fpreset()的调用“重置浮点包。”什么是“浮点包?”这是否也清除了FPU状态字?我看到在从SIGFPE恢复时要调用_fpreset()的文档,但是_clearfp()也没有这样做?我需要同时打电话吗?

我正在开发一个取消屏蔽某些FP异常的应用程序(使用_controlfp())。当我想将FPU重置为默认状态时(例如,在调用.NET代码时),我应该只调用_clearfp()_fpreset()两者。这是性能关键代码,所以如果我不需要,我不想同时调用这两个代码......

1 个答案:

答案 0 :(得分:3)

_fpreset()重置浮点单元的状态。它将FPU精度重置为默认值清除FPU状态字。我看到使用它的两个偶然事件是从FPE中恢复时(如你所说)以及从库代码中获取控制权(例如,你无法控制的DLL)以任何方式拧紧FPU,比如更改精度。