尝试使用蒙特卡罗模拟,我正在努力使用C ++。我是一名数学家,这是我第一次使用C ++。
/* The main routine
*/
int main(int argc,char *argv[])
{
struct timeval tv;
struct timezone tz;
double res,err;
int loops,n,i;
/* require correct number of arguments
*/
if (argc != 3)
{
fprintf(stderr,usage);
exit(0);
}
n = atoi(argv[1]); /* first int */
loops = atoi(argv[2]); /* 2nd int */
/* seed the random number using system time
* tv.tv_sec contains time in seconds, tv.tv_usec in microseconds
*/
if((r = gsl_rng_alloc(gsl_rng_mt19937)) == NULL) {
printf("ERROR: Could not create random number generator\n");
exit(1);
}
gettimeofday( &tv, &tz );
gsl_rng_set(r, tv.tv_sec + tv.tv_usec );
for (i=0; i<100000; i++) gsl_rng_get (r);
for (i=0; i<loops; i++)
{
res = mcint(n,&err);
printf("%d %g %g\n",i,res,err);
}
return(1);
}
其中mcint是我的蒙特卡罗功能。
问题是argc没有正确数量的参数(3)。 我该如何解决这个问题?
答案 0 :(得分:2)
argc是从命令行调用程序时的参数数量。
你的程序需要3个参数。第一个始终是程序可执行文件的名称。因此,它需要您必须提供的其他参数:第一个是第一个integer(n),第二个是您希望它执行的迭代次数。
解决问题的最简单方法是编译程序并从命令行调用它:
MYMONTECARLO 100 1000
如果您在IDE下,请查看手册中的如何提供此类运行时参数。例如,对于code :: blocks,请查看this question