我知道有一些库提供了生成随机分布的函数。好吧,我想编写自己的函数,
为此,我创建了一个线性同余生成器:
long Module::LCG()
{
RN = (16807*RN)%(2^31-1);
return RN;
}
现在,我不知道该怎么办。为了统一分布,我需要有一个生成数字所在的区间,以及平均值和标准差:
long Module::createUniform(int min, int max)
{
for(int i=min; i<=max ;i++)
{
LCG(); //can I invoke LCG() here ?
}
}
我在这里错过了平均值和标准偏差,但不知道如何包含它们。此外,createUniform
和LCG()
都是类Module的公共函数。函数createUniform
甚至可以调用LCG()
吗?
哦,你的RN的初始种子是1000.我不知道创建LCG是否有更好的方法,而不仅仅是为RN选择一个初始值?
好吧,显然我自己写这些功能并不是很聪明。所以我做了一些改变:
long Module::LCG()
{
RN = (16807*RN)%(2 << 31 - 1); // '<<' corresponds to a left-shift of the binary number
return RN;
}
long Module::createUniform(int min, int max)
{
std::uniform_int_distribution<int> distribution(min,max); //part of 'random' - library
int p[max-min] = {};
for(int i=min; i<=max ;i++)
{
p[i] = distribution(LCG(),LCG()); // can I invoke LCG() by createUniform ?
}
}
会不会喜欢这个工作?