c++ - linux浮点_control87替换

标签 c++ linux windows gcc floating-point

我正在移植一些代码(从 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 函数的等价物是什么,希望有人能在这里为我指出正确的方向。

最佳答案

事实上,看起来 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 );

关于c++ - linux浮点_control87替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29247764/

相关文章:

C++ - 使用 vector <衍生类>的静态函数找不到声明的标识符

c++ - cmake - find_library - 自定义库位置

python - 请建议在 Windows 上的 Pycharm 中使用 Virtualenv 的最佳实践

c++ - 逐个字符不一致地响应\n

c++ - 如何忽略来自 3rd 方包的警告?

c++ - 我可以使用哪个工具来跟踪 C++ 程序中每个函数的效率?

c++ - 通配符匹配递归算法 C++

linux - 将IP连接限制为具有iptables的端口,但允许一个IP无限连接

linux - 如何将多个较小文件中的文本插入主文件的不同位置?

c - 与具有超过 500 万个键值对的 REDIS 匹配的最长前缀