c
题目: 给定抽取随机数的子函数void rand(double *p, int n, double *r){
int i,m;
double s,u,v;
s=65536.0; u=2053.0; v=13849.0;
for (i=0; i<=n-1; i++)
{ *r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p=*r/s;
}
}
表示从均匀分布U(0,1)里抽取n个随机数,存储在数组p里。
本题要求从以上均匀均匀里抽取1000随机数。事实上,这1000个数是从连续的均匀分布里抽取的。要求此均匀分布的样本均值和样本方差。要求设置种子数为1,例如
Main(){
double r=1,p;
int n=100;
rand(p,100,&r);
}
我写的:
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
void rand(double *p, int n, double *r)
{
int i,m;
double s,u,v;
s=65536.0;
u=2053.0;
v=13849.0;
for (i=0; i<=n-1; i++)
{
*r=u*(*r)+v;
m=(int)(*r/s);
*r=*r-m*s;
p=*r/s;
}
}
int main()
{
double r=1,p,a,s=0,m=0,d;
int i,n=1000;
void rand(double *p, int n, double *r);
rand(p,n,&r);
for(i=0; i<n; i++)
{
s+=p;
}
a=s/1000;
printf("%lf\n",a);
for(i=0; i<n; i++)
{
m+=(p-a)*(p-a);
}
d=m/1000;
printf("%lf\n",d);
return 0;
}
问题:为啥我编译错误说rand conflicting?这道题怎么做呀? 本帖最后由 PC_ 于 2020-5-8 11:13 编辑
rand这个函数在<math.h>已经定义过了 , 程序其他地方没有问题 , 改过来之后输出结果是: 0.506232 和 0.085072
为了方便复制粘贴 , 我就直接把修改后的代码放上来吧:{:10_257:}
#include <stdio.h>
#include<stdlib.h>
#include<math.h>
void Rand(double *p, int n, double *r);
void Rand(double *p, int n, double *r)
{
int i ,m;
double s ,u ,v;
s = 65536.0;
u = 2053.0;
v = 13849.0;
for (i = 0; i <= n - 1; i++)
{
*r = u * (*r) + v;
m = (int)(*r / s);
*r = *r - m * s;
p = *r / s;
}
}
int main()
{
double r = 1 ,p ,a ,s = 0 ,m = 0 ,d;
int i ,n = 1000;
Rand(p ,n ,&r);
for(i = 0; i < n; i++)
{
s += p;
}
a = s / 1000;
printf("%lf\n" ,a);
for(i = 0; i < n; i++)
{
m += (p - a) * (p - a);
}
d = m / 1000;
printf("%lf\n" ,d);
return 0;
}
页:
[1]