2012-06-26 149 views
0

我需要处理浮点数(> 200,000数字)的大数组,并对这些数组执行一些数学运算。在C++中处理大数字的最佳方法是什么?

你有什么建议来对待这些数组,以便我不会遇到任何堆栈溢出问题?

UPDATE:我想做简单和复杂的数学(和,产品,sin,cos,arctan)操作。

+7

如果堆栈不在堆栈上,则无法获取堆栈溢出问题。 – chris

+1

取决于你想要对他们做什么。 – m0skit0

+2

解释你想用它们做什么可能会有所帮助 –

回答

-1

我建议你把他们对待10.000每10.000然后总结一切? 这取决于你在做什么操作。

+0

Hey NeeL,这似乎也是一个似是而非的建议,但我试图避免这样做。让我们看看我是否管理! – maibaum

-3

取决于你想要对他们做什么。

另外,正如克里斯在评论中所说的,为你的数组动态分配内存(从堆中获取内存)并避免将它用作局部变量(它被分配在堆栈中)。

+2

不,_do not_ use' new',除非你真的知道你在做什么。即使如此,也许有更好的方法。 –

+0

感谢您的更正,但任何人都可以详细说明为什么在这种情况下使用新功能不好? – m0skit0

+0

在(几乎)_any_情况下使用'new'是不好的。当然,你认为你很酷,全都通过用'new'分配一个缓冲区,但是然后抛出一个异常,并且泄漏。改为使用智能指针和/或容器。 –

6

需要按顺序操作的简单数字数据?

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行分开,以便同时只有很多浮点数在内存中。

+0

嘿,rubenvb。这看起来有希望。数据并不真实(它们来自不同对象的观察结果),但是,我想依次执行操作。我会试着回来说说结果是什么。 – maibaum

相关问题