我正在尝试计算一个积分,其中根据所处的间隔不同地定义被积分数。因此,我们有了f:[-1,1] -> R
,其中{{1}代表f(x) = sin(pi/x)
1}}和x
中[-1,0]
中f(x) = 1/2
。
使用Maple我得到积分的值大约为x
。但是,在[0,1]
中,我得到了I = 0.04030
。这是我自己的代码:
C
有人能看到为什么这段代码给了我错误的答案吗?
答案 0 :(得分:4)
您必须
S_n
因此正确的代码是:
double x,y,S_n;
int n = 10000;
int i;
S_n = 0;
srand ( time ( NULL));
for (i = 0; i < n; i++){
x = (double)rand()/RAND_MAX*2.0-1.0; //generate double in range -1 to 1
if(x < 0){
y = sin(M_PI/x);
}
else {
y = 0.5;
}
S_n = S_n + y * (1.0 - -1.0);
}
S_n = S_n/n;
printf ( "%f\n", S_n);
答案 1 :(得分:2)
您的代码会调用未定义行为(UB),因为它不会初始化S_n
,但会在循环中将其增加1。
因此,当您在此处声明时:
double x,y,S_n;
您也应该像这样初始化它:
double x, y, S_n = 0.0;
然后,我得到的输出值为0.36。如果我是你,我将返回我的Maple代码,并仔细检查它。
PS:如果仍然不确定,请发布一个新的Maple问题,该问题链接到该问题。