7

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

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

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

我的考虑纯粹是性能。我是否会为较小的数字节省足够的数学时间,以便在输入后检查每个数字是值得的。

4

4 回答 4

2

真的很难说 - 取决于你的 3rd 方库:)

最好的办法是使用 System.Diagnostics.StopWatch 类,进行大量不同的计算,对它们进行计时并比较结果,我猜..

[编辑] - 关于基准,我会对您的 largeInt 类型进行一系列基准测试,以对常规 32/64 位数字进行计算,并检查该数字是否适合常规 Int32/Int64 类型(其中他们应该),将它们“向下转换”为这些类型,然后使用这些类型运行相同的计算。从您的问题来看,如果内置类型更快,这听起来像是您将要做的事情。

如果您的应用程序的目标用户比您自己多,请尝试在不同的机器上运行它们(单核、多核、32 位、64 位平台),如果平台似乎对计算时间有很大影响,请使用某种类型策略模式在不同的机器上进行不同的计算。

祝你好运 :)

于 2009-03-01T14:10:14.510 回答
2

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

于 2009-03-01T14:17:10.217 回答
2

我会说是的,只要您在常规范围内有足够的价值,支票就会物有所值。

逻辑很简单:整数加法是一条汇编指令。结合对比,就是三四条指令。这种操作的任何软件实现很可能会慢得多。

最佳情况下,应该在 LargeNumber 库本身中完成此检查。如果他们不这样做,您可能需要一个包装器以避免到处检查。但是,您还需要考虑包装器的额外成本。

于 2009-03-01T14:17:46.877 回答
0

在一个项目中工作,其中相同的字段需要处理非常大的数字,同时处理非常小的数字的精度。
最终将每种此类数字的存储到字段(尾数和指数)中。
我们为尾数/指数计算做了一个类,它表现良好。

于 2009-03-01T14:53:27.183 回答