【发布时间】:2016-05-03 14:25:06
【问题描述】:
有人可以帮我看看我用 C 写的代码吗?它可以生成数字,但是if条件看起来不对,但我不知道如何修复它。
我需要得到一些随机分布的值,这些值在一个特殊的区间内,所以我使用如下的 for 循环:
n=10; mu=2; mu_plus=3; p=0.2;
for(i=1; i<=n; i++)
{
x1 = gasdev(&idum);
x2 = gasdev(&idum);
z = sqrt(1-p*p)*x1 + p*x2 + mu;
z_p= x2 + mu_plus;
if (z > 2.17 || z<-2.17)
{
Z[i]=z;
Z_plus[count]=z_p;
}
printf("%d %lf %lf\n", i, Z[i], Z_plus[i]);
}
其中 gasdev() 是用于生成具有标准正态分布的随机值的函数,Z 和 Z_plus 是 1*n 向量。结果一团糟,所以我认为IF条件一定是错误的。任何人都可以帮助我吗?谢谢。
我也尝试了 While 循环。
while(count < n)
{
x1 = gasdev(&idum);
x2 = gasdev(&idum);
z = sqrt(1-p*p)*x1 + p*x2 + mu;
z_p= x2 + mu_plus;
if (z > 2.17 || z<-2.17)
{
count++;
Z[count]=z;
Z_plus[count]=z_p;
}
printf("%d %lf\n",count, Z[count]);
if (count >n) break;
}
可以正常打印,但最后出现错误。
谢谢!
【问题讨论】:
-
您是否要在
+/-2.17之间绑定z? -
顺便说一句:
(1-p)*(1+p)的数值比1-p*p更稳定。当|p|靠近1时,代码会得到更好的答案。 -
没有。我尝试选择大于 2.17 或小于 -2.17 的值。
-
Z和Z_plus是如何声明的?在for循环中,它们的大小至少需要为 11(或更可能,您想要for(i=0; i<n; i++)。)此外,在for循环中,i和count似乎可能混淆了. -
for循环的变体在if条件未满时不会为对应的数组位置设置值,因此您必须使用while方法。但是你应该只在设置数组值之后增加count,因为count将是一个,否则在最后一次迭代中等于n。
标签: c if-statement for-loop while-loop