linux浮点_control87替换

Posted

技术标签:

【中文标题】linux浮点_control87替换【英文标题】:linux floating point _control87 replacement 【发布时间】:2015-03-25 04:57:18 【问题描述】:

我正在研究一些代码的移植(从 Windows 到 Linux),主要是为了了解更多关于在 Linux 上使用 c++ 编程的信息。

我遇到了一个包含这个的函数:

_clear87();

_control87(_PC_24, MCW_PC);
_control87(_RC_CHOP, MCW_RC);
_24 = getFPUsw(); // 24, chop
_control87(_RC_NEAR, MCW_RC);
_24r = getFPUsw(); // 24, rounding

_control87(_PC_53, MCW_PC);
_control87(_RC_CHOP, MCW_RC);
_53 = getFPUsw(); // 53, chop
_control87(_RC_NEAR, MCW_RC);
_53r = getFPUsw(); // 53, rounding

_control87(_PC_64, MCW_PC);
_control87(_RC_CHOP, MCW_RC);
_64 = getFPUsw(); // 64, chop
_control87(_RC_NEAR, MCW_RC);
_64r = getFPUsw(); // 64, rounding

据我所知。 _control87 和 _clear87 仅适用于 Windows,用于更改浮点计算等的 FPU 模式。在<float.h>中的windows上定义

Linux 上的等价物似乎与#include <cfenv> 中的函数类似

我不确定这些 _control87 函数的等价物是什么,我希望有人可以在这里为我指明正确的方向。

【问题讨论】:

我的记忆是朦胧的,但我想你想看看fpu_control.h header file来操作x87 FPU控制字的精度控制位。 谢谢。这看起来更像我需要的。 【参考方案1】:

事实上,似乎 fenv.h 是平台无关的。 例子: http://howtounix.info/man/FreeBSD/man3/fenv.3

使用 .NET,这也可能有效:

Word uSaved8087CW = System::Default8087CW;
...
//for example:
System::Set8087CW(0x133f); // Disable all fpu exceptions.
//calculations
...
System::Set8087CW( uSaved8087CW );

【讨论】:

以上是关于linux浮点_control87替换的主要内容,如果未能解决你的问题,请参考以下文章

浮点运算何时“无效”?

UI5-文档-4.3-Controls

Linux 学习总结(87)—— shell 中各种括号的作用()(())「」「「」」「」

Linux 学习总结(87)—— shell 中各种括号的作用()(())「」「「」」「」

cache-contro页面缓存处理设置

chrome 87:请求的资源上不存在“Access-Control-Allow-Origin”标头