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替换的主要内容,如果未能解决你的问题,请参考以下文章
Linux 学习总结(87)—— shell 中各种括号的作用()(())「」「「」」「」