我已經給出了精確的4位數字的小數點後的數百萬的數字。添加數以百萬計的定點數
他們必須以複雜的方式加入和減少很多(在優化問題中)。之後(和之間)我必須確定確切的值。
在C#中,三種不同的possibilites來到我的腦海:
- 使用雙打和定義一個舍入誤差進行比較。
- ,用十進制類型
- 創建一個類型與整數運算
工作,你有什麼建議?
我已經給出了精確的4位數字的小數點後的數百萬的數字。添加數以百萬計的定點數
他們必須以複雜的方式加入和減少很多(在優化問題中)。之後(和之間)我必須確定確切的值。
在C#中,三種不同的possibilites來到我的腦海:
工作,你有什麼建議?
絕對不要使用double
。它並不代表你獲得的信息。
我會親自從decimal
開始。這是您獲得的信息的最適合的類型,您可以依賴結果。
如果,證明太慢了,你可以將所有值轉換爲整數,做算術,然後再轉換回 - 但我只能這樣做後你見過decimal
版本如何執行。
double
僅提供小數部分的近似表示(例如,沒有精確的二進制表示0.2的十進制表示)。 decimal
類型可以在整個算術運算中產生一個確切的值,但decimal
可以是比任何base2類型慢的順序,例如float和double(如果不是更多)。
也許你可以在算術運算之前將所有數字都縮放到10,000的數量級,然後將基數放回去;檢查小數如何執行。
你能告訴我們更多關於優化問題的信息嗎?數字的界限是什麼? (比如說,他們總是少於十億?少於一千?等等。) –