vc帮忙看下

来源:百度知道 编辑:UC知道 时间:2024/05/04 21:02:32
#include "math.h"
//用混合同余法产生(a,b)区间上的随机数yi.
double uniform(double a,double b,long *seed)
{
double t;
*seed=2045*(*seed)+1;
*seed=*seed-(*seed/1048576)*1048576;//????
t=(*seed)/1048576.0;
t=a+(b-a)*t;
return(t);
}

double gauss(double mean,double sigma,long *s)
{
int i;double x,y;
for(x=0,i=0;i<12;i++)
{
x+=uniform(0.0,1.0,s);
}
x=x-6.0;
y=mean+x*sigma;
return(y);
}

void sinwn(double a[],double f[],double ph[],int m,double fs,double snr,long seed,double x[],int n)
{
int i,k;
double z,pi,nsr;
pi=4.0*atan(1.0);
z=snr/10.0;
z=pow(10.0,z);
z=1.0/(2*z);
nsr=sqrt(z);
for(i=0;i<m;i++)
{
f[i]=2*pi*f[i]/fs;
ph[i]=ph[i]*pi/180.0;
}
for(k=0;k<n;k++)
{
x[k]=0.0;
for(i=0;i<m;i++)
{
x[k]=x[k]+a[i]*sin(k*f[i]+ph[i]);

????地方的意思是取*seed 二进制形式的后面20位数字。

举个例子,这里1048576是2的20次方,我们把1048576用10代替来说明。

比如*seed此时是35用35除以10 因为整形数字舍去小数,所以等于3,再乘以3等于30,用 35-30=5;相当于35%10;

所以改成*seed%1048576更清晰。