永发信息网

用C++写一个形状参数为c=1.0的GGD分布的随机数的程序

答案:1  悬赏:10  手机版
解决时间 2021-11-18 11:26
  • 提问者网友:伴风望海
  • 2021-11-18 01:47
用C++写一个形状参数为c=1.0的GGD分布的随机数的程序
最佳答案
  • 五星知识达人网友:骨子里都是戏
  • 2021-11-18 02:45
随机数程序

#include
#include
#include
#include
#include
#include
#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)
unsigned int seed=0; //seed 为种子,要设为全局变量
void mysrand(long int i) //初始化种子
{
seed = -i;
}
float ran1(long *idum)
{
int j;
long k;
static long iy=0;
static long iv[NTAB];
double temp;
if (*idum <= 0 || !iy) //Initialize.
{
if (-(*idum)<1) *idum=1; //Be sure to prevent idum = 0.
else *idum =-(*idum);
for (j=NTAB+7;j>=0;j--) //Load the shuffle table (after 8 warm-ups).
{
k=(*idum)/IQ;
*idum=IA*(*idum-k*IQ)-IR*k;
if (*idum < 0) *idum += IM;
if (j < NTAB) iv[j] = *idum;
}
iy=iv[0];
}
k=(*idum)/IQ; //Start here when not initializing.
*idum=IA*(*idum-k*IQ)-IR*k; //Compute idum=(IA*idum) % IM without over-
if(*idum < 0) *idum += IM; //flows by Schrage’s method.
j=iy/NDIV; //Will be in the range 0..NTAB-1.
iy=iv[j]; //Output previously stored value and refill the
iv[j] = *idum; //shuffle table.
if ((temp=AM*iy)>RNMX) return RNMX; //Because users don’t expect endpoint values.
else return temp;
}
long a[1];
double x;
double c=4;
double ran()
{
x=c*x*(1-x);
return x;
}
void chushihua()
{
mysrand(time(0));
a[0]=seed;
do
{
x=1e-37;
}
while(x==0||x==1||x==0.25||x==0.5||x==0.75);
}
int flip();
void main()
{
chushihua();
double t;
for(int i=0;i<1e13;i++)
{
t=ran();

if(t==0||t==1||t==0.25||t==0.5||t==0.75)
{
cout< }
}

}
int flip()
{
if(ran1(a) <= 0.5)
return(1);
else
return(0);
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯