为什么当我选择>250000个采样点时,程序不起作用?

Why is it that when I choose >250000 sample points, the program does not work?

本文关键字:程序 不起作用 采样 250000个 选择 gt 为什么      更新时间:2023-10-16

下面的代码可能不是最好看的,但它可以完成工作。至少我是这么想的。当我尝试使用大于 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);