我正在阅读生成随机数的代码。但我不知道它是哪个发行版。谁能告诉我它是哪个发行版?
#include<cmath>
double rand(double min, double max)
{
return min+(max-min)*rand()/(RAND_MAX+1.0);
}
double normal(double x, double miu,double sigma)
{
return 1.0/sqrt(2*pi)/sigma*exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));
}
double randn(double miu,double sigma, double min ,double max)
{
double x,y,dScope;
do{
x=rand(min,max);
y=normal(x,miu,sigma);
dScope=rand(0.0,normal(miu,miu,sigma));
}while(dScope>y);
return x;
}
我用参数(0,0.01,-0.6,0.6)调用了函数randn。我想知道randn代表哪个发行版?它让我很困惑,dScope用来做什么? 共有14951个样本。直方图如下:
答案 0 :(得分:2)
不,它不是正态分布(它从-Infinity到+ Infinity),而是截断正态分布,通过区间[min ... max]中的接受/拒绝方法进行采样。链接:https://en.wikipedia.org/wiki/Truncated_normal_distribution
答案 1 :(得分:0)
randn
使用普通或高斯分布生成数字。钟形概率密度函数(您的直方图与它类似)是此分布的关键标识符。
https://en.wikipedia.org/wiki/Normal_distribution维基百科有关此分发的文章。