2012-12-29 75 views
2

我已經給出了精確的4位數字的小數點後的數百萬的數字。添加數以百萬計的定點數

他們必須以複雜的方式加入和減少很多(在優化問題中)。之後(和之間)我必須確定確切的值。

在C#中,三種不同的possibilites來到我的腦海:

  1. 使用雙打和定義一個舍入誤差進行比較。
  2. ,用十進制類型
  3. 創建一個類型與整數運算

工作,你有什麼建議?

+0

你能告訴我們更多關於優化問題的信息嗎?數字的界限是什麼? (比如說,他們總是少於十億?少於一千?等等。) –

回答

6

絕對不要使用double。它並不代表你獲得的信息。

我會親自從decimal開始。這是您獲得的信息的最適合的類型,您可以依賴結果。

如果,證明太慢了,你可以將所有值轉換爲整數,做算術,然後再轉換回 - 但我只能這樣做你見過decimal版本如何執行。

3

double僅提供小數部分的近似表示(例如,沒有精確的二進制表示0.2的十進制表示)。 decimal類型可以在整個算術運算中產生一個確切的值,但decimal可以是比任何base2類型慢的順序,例如float和double(如果不是更多)。

也許你可以在算術運算之前將所有數字都縮放到10,000的數量級,然後將基數放回去;檢查小數如何執行。