linux浮点控制87替换

linux floating point _control87 replacement

本文关键字:替换 控制 linux      更新时间:2023-10-16

我正在处理一些代码的端口(从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> 中的窗口上定义

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 );