2015-03-25 57 views
1

我正在通過一些代碼的端口(從Windows到Linux),主要是嘗試瞭解更多關於在Linux上使用C++編程的內容。linux浮點_control87替換

我遇到含有這樣的功能:

_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功能等效的是,我希望有人能指出我正確的方向。

+1

我的記憶是模糊的,但我認爲你想看看[fpu_control.h頭文件(HTTP:// www.gnu.org/software/gnulib/manual/html_node/fpu_005fcontrol_002eh.html)來操縱x87 FPU控制字的精確控制位。 – njuffa 2015-03-25 14:56:40

+0

謝謝。這看起來更像我所需要的。 – Tim 2015-03-25 23:32:31

回答

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