大数类型

7

我正在开发一个需要处理非常大的数字的应用程序。

我查看了一些可用的大数类,并找到了几个我满意的。我有一个用于大整数和大浮点数的类。

由于一些数字将是小的,一些数字将是大的,所以问题是是否值得检查数字的长度,如果它很小,使用常规的C# int或double,如果它很大,则使用其他我已经拥有的大数类,或者如果我已经在使用大整数和大浮点数类,即使对于较小的数字,也应该坚持使用它们。

我的考虑纯粹是性能。对于较小的数字,我会节省足够多的时间,以至于值得在将每个数字放入后检查吗?


请查看此问题 - Mitch Wheat
你在使用哪些类来处理更大的数字? - ahsteele
我正在尝试使用以下几个库:Microsoft.FSharp.Math.BigInt Microsoft.SolverFoundation.Common.BigInteger http://www.codeproject.com/csharp/biginteger.asp IntX对于小数,我使用的是: w3b.sine Microsoft.FSharp.Math.BigNum我将对它们进行一些基准测试,看看结果如何。 - Sruly
4个回答

2

很难说 - 取决于您使用的第三方库 :)

最好使用System.Diagnostics.StopWatch类,进行大量不同的计算,计时并比较结果,我猜这样做会更好..

[编辑] - 关于基准测试,我会使用您的largeInt类型执行常规32/64位数字的计算系列,并检查数字是否适合常规Int32 / Int64类型(它们应该),将它们“向下转换”为这些类型,然后使用这些类型运行相同的计算。根据您的问题,如果内置类型更快,则应该采用这种方法。

如果您的应用程序面向的是比您自己更多的人,请尝试在不同的机器上运行它们(单核,多核,32位,64位平台),如果平台对计算所需的时间产生了很大的影响,请使用某种策略模式在不同的机器上以不同的方式进行计算。

祝你好运 :)


@Sruly - 那些能够复制您的应用程序所需数学类型的内容;-p - Marc Gravell

2
我希望一个好的大数字库能够自己进行这种优化...

2
我认为是的,只要你有足够数量在正常范围内的值,这个检查将会超额赎回成本。
逻辑很简单:整数相加就是一个汇编指令。再加上比较,就是三到四个指令。任何这样操作的软件实现都可能会慢得多。
最理想的情况是,在LargeNumber库自身中完成这个检查。如果他们没有这样做,你可能需要一个包装器来避免在许多地方进行检查。但是你需要考虑包装器的额外成本。

0

曾在一个项目中工作,需要处理非常大的数字,并同时处理非常小的数字的精度。
结果发现每个这种类型的数字都需要储存到两个字段(尾数和指数)中。
我们为尾数/指数计算制作了一个类,并且它的表现非常出色。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接