2014-06-16 48 views
1

我正在寫一個C#庫進行區間算術,爲此我需要 將浮點運算舍入模式設置爲Up和Down。我知道在C++ 它可以通過fesetround()函數來實現。在C#中是否有等價物, 或者如果沒有,我如何才能以其他方式實現此目的?有沒有C++等價的C++ fesetround()函數?

+0

我想可以很容易地從C#調用C代碼。您可以簡單地調用一個C存根,從您的C#庫中設置FPU舍入模式。四捨五入模式在處理器中設置,並且會影響CPU從該點開始執行的所有浮點計算。 –

+0

它需要將C++代碼編譯爲一個dll文件,然後將其鏈接到我的C#程序? – Buyuk

+2

千萬不要修改C#中的FPU控制字。這是你可以想象的最糟糕的全球變量。隨着全局性標準的痛苦,你的改變不會持續下去,並會隨意消失。 CLR中的內部異常處理代碼在處理異常時將其重置。 –

回答

1
Math.Ceiling(num) // Rounds up 
Math.Floor(num) // Rounds down 
+0

它會工作,如果我想要實現的是設置舍入一次。 Round/Ceil將不起作用。它會圍繞操作的結果。不是浮點單位內的計算。 – Buyuk

+1

這些函數與FPU舍入模式無關。 –

+3

我不明白最後票數。 Floor和Ceil產生整數結果,並且與舍入模式無關,該舍入模式處理在FP操作之後四捨五入時如何處理最低位(有時也是高位)。 –

1

我遵循Pascal Cuoq的建議,並創建了一個非常簡單的 - 一個功能組件。 如果有其他人會遇到這樣的問題,我將它發佈在這裏。

解決方案使用我的lib:

  1. 下載DLL文件來自:https://www.dropbox.com/s/o3vfxe4rpefhly7/RoundModeUtil.dll
  2. 添加引用到項目庫中。
  3. 包括使用RoundModeUtils;項目代碼中的行。
  4. 用法:

    static void RoundModeConfig::setround(int mode); 
    
    // mode can be set to one of the following values: 
    static int RoundModeConfig::UPWARD 
    static int RoundModeConfig::DOWNWARD 
    static int RoundModeConfig::DEFAULT  // To nearest mode. 
    static int RoundModeConfig::TOWARDZERO 
    

感謝漢斯帕桑特你的建議,我應該記住它。 感謝大家的幫助,希望有人會發現我的DLL有用:)

+0

你還有這個DLL嗎?目前正在研究同一個項目。 – selmaohneh

相關問題