2009-03-01 25 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精度非常小。
结束与存储到字段(尾数和指数)为每种类型的这种类型。
我们为尾数/指数计算做了一个类,它表现良好。