2009-03-01 30 views
7

我正在研究需要處理大量數字的應用程序。大數字的類型

我查了幾個可用的LargeNumber類,發現了一些我很滿意的東西。我有一個大整數和大浮點數的類。

由於一些數字會很小,並且一些大的問題是是否值得檢查數字的長度,如果它很小,請使用常規C#int或double,如果is很大,則使用其他類I或者如果我已經在使用Large Integer和Large Float類,那麼即使對於較小的數字,我也應該堅持使用它們。

我的考慮是純粹的表現。我將節省足夠的時間對數學的人數較少,這將是值得的檢查後,被放在每個號碼

+0

您使用哪些類來獲取更大的數字? – ahsteele 2009-03-01 15:56:39

+0

我正在玩幾個。 Microsoft.FSharp.Math.BigInt Microsoft.SolverFoundation.Common.BigInteger http://www.codeproject.com/csharp/biginteger。ASP 的INTx 爲小數我使用 w3b.sine Microsoft.FSharp.Math.BigNum 我會做所有他們的一些基準測試,看看我得到 – Sruly 2009-03-01 18:16:14

回答

2

真的很難說 - 取決於你的第三方庫:)

最好的選擇將使用System.Diagnostics.StopWatch類,做gazzillion不同的計算,計時和比較結果,我猜..

[編輯] - 關於基準,我會做一系列的基準測試largeInt類型對常規32/64位數進行計算,並檢查數字是否適合常規Int32/Int64類型(他們應該),將其「向下轉換」爲這些類型,然後運行相同的類型calcu使用這些類型。從你的問題來看,這聽起來像你將在內置類型更快時所要做的事情。

如果你的應用程序是針對比你自己更多的人,嘗試在不同的機器上運行它們(單核,多核,32位,64位平臺),並且如果平臺在計算時間內似乎有很大影響,則可以使用某種策略模式在不同的機器上進行不同的計算。

祝你好運:)

2

我期望一個體面的大量庫將能夠做它自己的這種優化...

2

我要說的是,該檢查將超過支付本身,只要你在正常範圍內有足夠的價值。

邏輯很簡單:整數加法是一個彙編指令。結合比較,這是三條或四條指令。任何此類操作的軟件實施可能會慢得多。

理想情況下,這個檢查應該在LargeNumber庫中完成。如果他們不這樣做,你可能需要一個包裝,以避免檢查到處。但是你需要考慮包裝的額外成本。

0

曾在一個項目中工作,其中相同的字段需要處理非常大的數字,同時handels精度非常小。
結束與存儲到字段(尾數和指數)爲每種類型的這種類型。
我們爲尾數/指數計算做了一個類,它表現良好。