手机网站建设的费用,眼科医院网站开发,自己做的网站如何赚钱,wordpress 戏 自媒体类主题一、简介
在C语言中常使用srand()random()的方式生成随机数#xff0c;该方式并不是一个很好的随据说生成方法#xff0c;一方面是因为其生成的随机数质量较低#xff0c;另一方面其随机数范围也有所限制。在C11中推荐使用随机数引擎的方式生成随机数。
如何高效得生成高质…一、简介
在C语言中常使用srand()random()的方式生成随机数该方式并不是一个很好的随据说生成方法一方面是因为其生成的随机数质量较低另一方面其随机数范围也有所限制。在C11中推荐使用随机数引擎的方式生成随机数。
如何高效得生成高质量得随机数甚至需要满足指定分布是一个复杂的问题本文只给出C11中常用的用于生成均匀分布、正态分布等特定分布的随机数代码并不对随机数生成理论进行解释。
二、代码示例
1. 均匀分布uniform distribution
#include iostream
#include randomint main()
{std::random_device rd; // 生成随机数种子std::mt19937 gen(rd()); // 定义随机数生成引擎std::uniform_int_distribution distrib_int(1, 6); // 定义随机数分布生成在[1,6]之间的的均匀分布整数for (int n 0; n ! 10; n){std::cout distrib_int(gen) ;}std::cout \n;std::uniform_real_distribution distrib_real(1.0, 6.0); // 定义随机数分布生成在[1.0,6.0]之间的的均匀分布实数for (int n 0; n ! 10; n){std::cout distrib_real(gen) ;}std::cout \n;return 0;
}2. 正态分布Normal distribution
生成其他分布的随机数跟生成均匀分布的随机数类似只需要改变随机数生成器即可。生成均值为5.0标准差为2.0的随机数可以使用以下随机数生成器
std::normal_distribution distrib_normal(5.0, 2.0);3. 泊松分布Poisson distribution
std::poisson_distribution d(4);4. 离散采样分布Discrete distribution整数
// 假设存在4种事件
// 事件1发生的概率为 40/(40101040)
// 事件2发生的概率为 10/(40101040)
// 事件3发生的概率为 10/(40101040)
// 事件4发生的概率为 40/(40101040)
// 那么采样四种事件的随机数生成器如下
std::discrete_distribution d({40, 10, 10, 40});三、参考
[1]. cppreference Standard library header random.