回答
std::normal_distribution
没有做任何的随机数生成。这是一个随机数字分布。随机数分布只映射由随机数引擎返回某种分布的值。他们自己不会做任何一代人。所以它是你关心的随机数引擎。
标准提供的随机数引擎之一,std::mersenne_twister_engine
是一个非常高质量的随机数引擎。您可以使用它,象这样的正态分布产生随机数:
std::random_device rd;
std::mt19937 gen(rd()); // Create and seed the generator
std::normal_distribution<> d(mean, deviation); // Create distribution
std::cout << d(gen) << std::endl; // Generate random numbers according to distribution
注意std::mt19937
是std::mersenne_twister_engine
一个typedef
。
std :: mt19937'是typedef for a特殊的'std :: mersenne_twister'模板实例化。 'std :: mt19937'是一个经过验证的伪随机数发生器。模板可以用产生不太好的引擎的值来实例化,所以大多数人应该坚持'std :: mt19937'。 – 2013-02-19 23:50:50
<random>
的标准库的整点是从随机数生成器,以独立分布。 You提供了一个生成统一整数的随机数生成器,并且分布负责将该随机统一整数序列转换为期望分布的样本。
幸运的是,<random>
库还包含一个随机数生成器的集合。 Mersenne Twister(std::mt19937
)尤其是一个相对较好的(即快速和统计学上的高质量)。
(您还需要提供用于发生器的种子)
我知道这个帖子很老,但是,我希望我的回答是有益的。我使用normal_distribution
为传感器生成高斯噪声。这对模拟传感器是有益的。例如,假设您有一个传感器,可以为您提供2D机器人的位置。每次移动机器人时,传感器都会提供一些关于机器人位置的信息。在OpenGL中,你可以模拟这个例子。例如,您可以跟踪鼠标的位置,并将一些高斯噪声添加到鼠标的实际位置。在这种情况下,您可以使用传感器来跟踪鼠标的位置,但由于噪音而具有不确定性。
- 1. 用于C#的LINEST函数模拟器
- 2. C++ TR1:如何使用normal_distribution?
- 3. 数学背后用C default_random_engine和normal_distribution ++
- 4. 使用c模拟mysql压缩函数#
- 5. C++模拟框架能够模拟非虚拟方法和C函数
- 6. C++ 11 normal_distribution和MATLAB normpdf
- 7. 在pester中模拟c#dll函数?
- 8. 函数的模拟函数参数
- 9. 虚拟函数C#
- 10. 虚拟函数C++
- 11. 类型的std :: normal_distribution的模板
- 12. 可以使用宏来模拟C++模板化函数吗?
- 13. 模拟安装应用程序c#
- 14. 使用C#Selenium WebDriver模拟API响应
- 15. 模拟JavaScript扩展函数
- 16. nmake - 模拟eval函数
- 17. unittest模拟函数输出
- 18. 模拟visual C++
- 19. C++虚拟析构函数
- 20. C++虚拟const函数
- 21. Javascript - 使用日期函数运行模拟的原型函数
- 22. 模拟在另一个函数中使用的函数
- 23. 模拟的函数不检查参数
- 24. 带参数的python模拟函数
- 25. 模拟异步函数调用
- 26. 在构造函数中使用模拟
- 27. 如何使用Rspec模拟[]函数?
- 28. 使用Moq来模拟构造函数?
- 29. Haskell使用“until”函数模拟[1 .. n]
- 30. 如何使用std :: normal_distribution
这完全取决于你的用例吗? – 111111 2013-02-19 19:24:31
用于模拟应用程序。 如果你告诉我使用Mersenne-Twister发生器,它会很好! – Aleanar 2013-02-19 19:30:21
请参阅此处的示例以了解如何使用正态分布的Mersenne-Twister:http://en.cppreference.com/w/cpp/numeric/random/normal_distribution – 111111 2013-02-19 19:33:47