为什么当我选择>250000个采样点时,程序不起作用?
Why is it that when I choose >250000 sample points, the program does not work?
下面的代码可能不是最好看的,但它可以完成工作。至少我是这么想的。当我尝试使用大于 250,0000 的多个采样点时,我遇到了问题。我真的不知道该怎么做。
我唯一尝试过的事情是将变量的类型从 int 切换到 long。
double MonteCarlo(){
const long N = 250000;
double GenR[NumPoints],apprx;
static double result[1];
double sum = 0;
default_random_engine generator;
uniform_real_distribution<double> distribution(0.0,1.0);
for(int i=0; i<=NumPoints; i++){
randGen[i] = distribution(generator);
sum += 4*exp(16*pow(GenR[i],2)-12*GenR[i]+2);
}
apprx = sum/NumPoints;
return apprx;
}
double
是 8 个字节。 其中250K是2MB。 您很可能已超出可用堆栈大小。 有一些编译器选项和运行时调用可以增加每个线程的堆栈空间量,但理想情况下,您只需从堆中分配这么多项目,而不是进行大型堆栈分配。 取而代之的是:
double GenR[NumPoints];
这:
double* GenR = new double[NumPoints];
. . .
delete [] GenR;
或者更好的事件,只需使用具有数组语义(包括[]
运算符(的合适集合类。 阿拉向量:
std::vector<double> GenR;
GenR.resize(NumPoints);
相关文章:
- 为什么使用数组元素查找最大数字的程序不起作用?
- 用于拆分空格字符串的程序不起作用
- 反转一个数字程序不起作用,为什么?
- C++从句子中删除给定字符的程序不起作用
- 为什么当我选择>250000个采样点时,程序不起作用?
- 我的C 程序不起作用
- C++加密程序不起作用
- 发送到64位应用程序不起作用
- 猪拉丁程序不起作用
- 结构程序不起作用
- 为什么程序不起作用
- 找不到WCHAR.H文件-Xcode 9.0中断QT创建者 - 旧修复程序不起作用
- C++为什么我的程序不起作用..:S.
- C++帮助!程序不起作用
- 如果我将类声明为常量,程序不起作用...而不是康特斯普?
- 为什么我的C++程序不起作用
- c++11-实现Promise的示例程序不起作用
- 为什么我的程序不起作用以及如何阻止它快速关闭
- 我的火狐扩展程序不起作用。使用C++XPCOM组件的Firefox扩展(XPI文件)的结构是什么?
- std::在C++中设置删除程序不起作用