2010-07-02 25 views
4

我們目前使用System.Decimals來表示我們正在開發的.NET應用程序中的數字。我知道小數的設計是爲了儘量減少由於四捨五入造成的誤差,但我也知道某些數字(例如1/3)不能用小數表示,因此一些計算會有小的舍入誤差。我相信這個錯誤的嚴重程度將非常小,但是一位同事不同意。因此,我希望能夠估計由於我們的應用程序中的舍入而導致的錯誤的數量級。舉例來說,我們正在計算一個「交易」的總數,並且每天將執行大約10,000次「交易」,並且大約有5-10次十進制運算(add,sub,div,mul等)來計算運行總數每筆交易收到的新的交易總額,圓形錯誤的巨頭的順序是什麼?有一個計算過程的答案也是很好的,所以我可以學習如何在未來爲自己做這件事。估算使用小數的計算錯誤

+1

十進制可以表示多達28位小數 - 它適用於貨幣操作。 如果你對你的操作很敏感,你可以限制分割和乘法或者實施對策,以消除分割/乘法不準確性(使用舍入+減法或其他方法)。 直接貨幣值不會有很多小數位數,所以加/減是安全的。無論使用多大的數據類型(如果不使用對策),某些瘋狂的分裂(如果累計)將導致損失。 – 2010-07-02 15:17:45

+0

有一件事我從來沒有確定過,據我所知,一個小數可以代表多達28位小數,但是這個變化是否隨着十進制小數的增加而變化?即可以保持百萬價值的小數在小數點後面還有28個位置嗎? – Robert 2010-07-02 16:18:20

+0

是 - 十進制是固定點,所以大小數的精度是一樣的。 http://msdn.microsoft.com/en-us/library/system.decimal.aspx – 2010-07-05 10:19:20

回答

1

What Every Computer Scientist Should Know About Floating-Point Arithmetic在給定浮點類型的精度的情況下詳細說明了估計浮點運算結果的誤差。但是,我還沒有在任何實際的程序中嘗試過,所以我很想知道它是否可行。

+0

如果有人可以將它翻譯成一個音節的單詞,我會覺得很好,但我想這是正確的答案。 – Robert 2010-07-05 10:18:13