帮同学作的题目----伪随机数检验
来源:互联网 发布:小班美工活动花蝴蝶 编辑:程序博客网 时间:2024/05/11 22:38
1. 伪随机数检验
(1) 对高级语言自带的[0,1]均匀分布伪随机数发生器,进行平均值、方差、均匀性和相关性检验。(N=1000, 5000, 10000; rk=10,50,100)
(2) 对循环数列: 0, 0.01, 0.02, …, 0.99, 1.00, 0, 0.01, …. 进行上述检验。
解答:
#include <stdio.h>
#include<stdlib.h>
#include <time.h>
/*
/*********************平均数******************
float pj(float *x,int num)
{ float sum=0;
for(int i=0;i<num;i++)
{sum+=x[i];}
cout<<"平均数为:"<<sum/num<<endl;
return sum/num;
}
/*********************均方差******************
float fc(float *x,int num,float ave)
{ float xx=0;
for(int i=0;i<num;i++)
{xx+=(x[i]-ave)*(x[i]-ave);}
cout<<"均方差为:"<<xx/num<<endl;
return 0;
}
/*********************均匀性******************
float jyx(float *x,float num,float div)//最多把区间分5份,均匀性采用X2检验法
{
float x2=0,suu=0,y;
y=1/div;
float *count=new float [div];
for(int j=0;j<div;j++)
{count[j]=0;}
for(int i=0;i<num;i++)
{
if(x[i]<=y) count[0]+=1;
else if(x[i]>y&&x[i]<=y*2) count[1]+=1;
else if(x[i]>2*y&&x[i]<=3*y) count[2]+=1;
else if(x[i]>3*y&&x[i]<=4*y) count[3]+=1;
else if(x[i]>4*y&&x[i]<=5*y) count[4]+=1;
}
for(j=0;j<div;j++)
{cout<<count[j]<<endl;
suu+=(count[j]-num/div)*(count[j]-num/div);
}
x2=suu*div/num;
cout<<"X2的值为:"<<x2<<endl;//得出X2后去查分布表,比较X2和Ta 如:X2<Ta,则在
//a的显著水平下,原伪随机数在[0,1]区间是均匀分布的
//X2分布表用一个二维数组即可,数太多我就不具体实现拉
delete [] count;
return 0;
}
/**********************计算相关性函数,r是函数指针,length是间距,N是抽样数*****************
double xgx(int (*r)(),int length,long N)
{ long n;
double rdm,average,power_aver,link_aver,corr,*p;
p=(double *)malloc(length*sizeof(double));
average=power_aver=link_aver=0;
for(n=0;n<length;n++)p[n]=(*r)();
for(n=0;n<N;n++)
{rdm=(*r)();
average+=rdm;
power_aver+=rdm*rdm;
link_aver+=p[n%length]*rdm;
p[n%length]=rdm;
}
average/=N;
power_aver/=N;
link_aver/=N;
corr=(link_aver-average*average)/(power_aver-average*average);
return(corr);
}
main()
{ //第一问
int i;
float av,x=0.01,data[5000],ss[100];
double d;
srand( (unsigned)time( NULL ) );//时间作为种子
for(i=0;i<=4999;i++)
{
data[i]=rand()%100;
data[i]=data[i]/100;
cout<<i <<" " <<data[i]<<endl;
}
cout<<"*********第一问*********"<<endl;
av=pj(data,5000);
fc(data,5000,av);
jyx(data,5000,4);
d=xgx(rand,3,10);//直接rand函数为参数传进去
cout<<d<<endl;
//第二问
cout<<"*********第二问*********"<<endl;
ss[0]=0;
for(i=1;i<=100;i++)
{
ss[i]=ss[i-1]+0.01;
}
av=pj(ss,100);
fc(ss,100,av);
jyx(ss,100,4);
d=xgx(rand,3,10);//直接rand函数为参数传进去
cout<<d<<endl;
}*/
main()
{
char *p=NULL;
p=(char*)malloc(100);
strcpy(p,"b");
printf("%c",*p);
return 0;
}
- 帮同学作的题目----伪随机数检验
- 帮同学翻译的一段摘要
- 帮同学做的:冒泡排序
- 伪随机数生成算法及性能检验
- 帮同学调JSP
- 帮同学征婚
- 08年帮同学写的文档,下载
- 黑马程序员-帮同学解决问题时发现的问题,尴尬!
- 帮同学写的C++大作业,图书管理系统
- 应急设施的优化选址-帮同学建模解题
- 伪随机数的生成
- 伪随机数的生成
- 伪随机数的安全
- 获取一个范围内的随机数(伪随机数)
- 非“伪”随机数的生成
- 生成伪随机数的源代码
- BASE64的伪随机数产生
- 常见的伪随机数产生
- SourceInsight与PC-LINT集成进行代码静态分析
- 在FC6上安装mplayer
- 收集网址
- 从程序员到营销员
- 程序代码美化工具的使用
- 帮同学作的题目----伪随机数检验
- 测试部门的组织架构
- 排队论
- 应用框架的设计与实现——.NET平台(4.2 Remoting 客户端激活)
- [翻译]CoolStreaming/DONet: 实时流媒体传输的数据重叠网络 (2)
- 警衔介绍
- 别忘了生活的目的
- BLOG开张
- printf()修饰符号