我正在尝试使用boost::normal_distribution来生成均值为0,标准差为1的正态分布。
以下代码不起作用,因为一些值超过了-1和1的范围(而且不应该超出)。请问有人可以指出我做错了什么吗?
#include <boost/random.hpp>
#include <boost/random/normal_distribution.hpp>
int main()
{
boost::mt19937 rng; // I don't seed it on purpouse (it's not relevant)
boost::normal_distribution<> nd(0.0, 1.0);
boost::variate_generator<boost::mt19937&,
boost::normal_distribution<> > var_nor(rng, nd);
int i = 0; for (; i < 10; ++i)
{
double d = var_nor();
std::cout << d << std::endl;
}
}
我的电脑上的结果是:
0.213436
-0.49558
1.57538
-1.0592
1.83927
1.88577
0.604675
-0.365983
-0.578264
-0.634376
正如您所看到的,所有值都不在-1和1之间。
提前感谢大家!
编辑: 当你有截止日期并且避免在实践之前学习理论时,就会发生这种情况。
boost::normal_distribution
类非常有帮助。我很高兴下面解释了统计问题。 - solvingPuzzlesboost::variate_generator<boost::mt19937&, boost::normal_distribution<> > var_nor(rng, nd);
中为什么要使用&
?我也在学习使用 boost。谢谢! - Vokramboost::mt19937&
意味着使用对现有对象的引用,而不是复制它。 - William