我需要处理浮点数(> 200,000数字)的大数组,并对这些数组执行一些数学运算。在C++中处理大数字的最佳方法是什么?
你有什么建议来对待这些数组,以便我不会遇到任何堆栈溢出问题?
UPDATE:我想做简单和复杂的数学(和,产品,sin,cos,arctan)操作。
我需要处理浮点数(> 200,000数字)的大数组,并对这些数组执行一些数学运算。在C++中处理大数字的最佳方法是什么?
你有什么建议来对待这些数组,以便我不会遇到任何堆栈溢出问题?
UPDATE:我想做简单和复杂的数学(和,产品,sin,cos,arctan)操作。
我建议你把他们对待10.000每10.000然后总结一切? 这取决于你在做什么操作。
Hey NeeL,这似乎也是一个似是而非的建议,但我试图避免这样做。让我们看看我是否管理! – maibaum
取决于你想要对他们做什么。
另外,正如克里斯在评论中所说的,为你的数组动态分配内存(从堆中获取内存)并避免将它用作局部变量(它被分配在堆栈中)。
不,_do not_ use' new',除非你真的知道你在做什么。即使如此,也许有更好的方法。 –
感谢您的更正,但任何人都可以详细说明为什么在这种情况下使用新功能不好? – m0skit0
在(几乎)_any_情况下使用'new'是不好的。当然,你认为你很酷,全都通过用'new'分配一个缓冲区,但是然后抛出一个异常,并且泄漏。改为使用智能指针和/或容器。 –
如果您的数据很少,您可以使用boost的sparse_matrix
http://www.boost.org/doc/libs/1_41_0/libs/numeric/ublas/doc/matrix_sparse.htm来表示您的数据结构并显着降低内存要求。
否则,我会建议寻找到你可以将数据分割成块,并在内存中的一个大块工作,那么存储状态文件和重复的方式。
需要按顺序操作的简单数字数据?
std::valarray<double>
如果分析显示,这是放慢你失望,寻找方法,使其更快的
std::valarray<double>::resize()
(是的,有没有reserve()
不幸。
为什么std::valarray<double>
的数值数据?如果您想对每个元素执行操作,只需致电
std::valarray<double>::apply(somefunction)
查看更多信息:a C++ reference。
如果你想能够reserve()
,你需要std::vector
,这也很好,但没有数学函数的重载,你可能想要使用。
编辑:当然,这是假设你有足够的内存来所有的阵列放入std::valarray
秒。如果不是,你应该将200,000行分开,以便同时只有很多浮点数在内存中。
嘿,rubenvb。这看起来有希望。数据并不真实(它们来自不同对象的观察结果),但是,我想依次执行操作。我会试着回来说说结果是什么。 – maibaum
如果堆栈不在堆栈上,则无法获取堆栈溢出问题。 – chris
取决于你想要对他们做什么。 – m0skit0
解释你想用它们做什么可能会有所帮助 –