我正在移植一些代码(从 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/