c++ - 为什么以及何时应调用 _fpreset()?

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

我能找到的唯一文档(在 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/

相关文章:

c++ - 嵌套结构的更多问题

c++ - 解析器 : parsing formulas in template files

c++ - while (std::cin >> value) 如何工作?

C++ 方法在简单的 C++ 项目中运行良好,但在智能设备项目中运行不佳

visual-studio - 打开 Visual Studio 时,它要我修改、修复或卸载

C 程序每次打印 0.00000 但返回正确答案

c++ - 为什么用c_str()转换路径类型后opendir()不打开路径?

c++ - 尝试使用 libpng 加载图像时 Windows 上出现运行时错误

mysql - 在 MySQL 中使用 float 类型更新

math - 球算术与区间算术