# include & ltstdlib.h & gt
# include & lttime.h & gt
# include & ltstdio.h & gt
#定義pi 3.1415926535897
//區間[min,max]上的均勻分布,min和max需要傳入相同類型的參數。
模板& ltT類& gt
T rand(T min,T max)
{
return min+(MAX-min)* RAND()/(RAND _ MAX+1.0);
}
//用miu的均值和σ在x處的方差求正交分布函數的函數值。
雙法線(雙x,雙miu,雙sigma)
{
返回1.0/sqrt(2.0 * pi)/sigma * exp(-1.0 *(x-miu)*(x-miu)/(2.0 * sigma * sigma);
}
//根據函數值曲線上矩形區域的位置分布,得到正函數X值。
雙倍隨機數(雙倍最大值、雙倍西格瑪、雙倍最小值、雙倍最大值)
{
雙x,y,dScope
做
{
x = rand(最小值,最大值);
y =正常(x,miu,sigma);
ds scope = rand(0.0,normal(miu,miu,sigma));
}
while(d scope & gt;y);
返回x;
}
//簡單算法,實際結果類似於公式法。
#定義rd (rand()/(RAND_MAX+1.0))
雙隨機數(雙最大值,雙西格瑪)
{
return(rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd+rd-6.0)* 0.5 * sigma+miu;
}
void main()
{
int I;
srand((無符號)時間(空));
for(I = 0;我& lt128;i++)
{
printf("%f%c ",randn(2.0,0.4),(i % 8 == 7)?\ n ':' ');
}
printf(" \ n ");
for(I = 0;我& lt128;i++)
{
printf("%f%c ",randn(2.0,0.4,0.0,4.0),(i % 8 == 7)?\ n ':' ');
}
printf(" \ n ");
}