В C ++ библиотека <random>
, вероятно, предоставляет все, что вам нужно. Он имеет 3 различных алгоритма шаблонов PRNG, в том числе Mersenne Twister, 3 адаптера для использования, 9 конкретных генераторов случайных чисел, а также доступ к недетерминированному источнику случайных чисел вашей системы.
Кроме того, он имеет 20 распределений случайных чисел, которые включают равномерное, нормальное, бернуллиево-пуассоновское распределение и выборочное распределение.
Вот (слегка модифицированный) пример из C ++ 11 FAQ Страуструпа.
#include <iostream>
#include <random>
#include <string>
#include <vector>
#include <functional>
int main()
{
auto rand = std::bind(
std::normal_distribution<>(15.0,4.0),
std::mt19937());
std::vector<int> output(32);
for (int i = 0; i<400; ++i)
++output[rand()];
for (int i = 0; i<output.size(); ++i)
std::cout << i << '\t' << std::string(output[i],'*') << '\n';
}
0
1
2 *
3 **
4 **
5 **
6 ***
7 ***
8 ******
9 ***************
10 **************************
11 ******************
12 ************************************************
13 ******************************************
14 ****************************************
15 *******************************
16 ***************************************
17 **************************************
18 *************************
19 *****************
20 ************
21 ************
22 *****
23 *******
24 ***
25 **
26
27 *
28
29
30
31