我正在寻找能够为C,C ++和Java生成非均匀分布的随机数的已知库。
由于
答案 0 :(得分:5)
我在这个相关问题中得到了一些有趣的回答:
答案 1 :(得分:3)
对于Java,一个选项是我的Uncommons Maths库。它支持均匀,高斯,二项式,泊松和指数分布。有一个WebStart demo,所以你可以看到它的作用。
答案 2 :(得分:2)
看看Alglib's implementations,他们有一些基本的发行版以多种语言实现。
答案 3 :(得分:2)
GNU科学图书馆(GSL)http://www.gnu.org/software/gsl/提供了许多非均匀随机分布 - 参见手册第19章“随机数分布”。 (统一随机数生成器在第17章“随机数生成”中)。实施在C.
答案 4 :(得分:1)
Boost具有相当广泛的随机数生成选择,以及通过多个分布过滤这些内容的能力。
答案 5 :(得分:0)
Numerical Recipe讨论了一些随机数生成器的算法。
答案 6 :(得分:0)
使用 C ++ 11 ,有许多新选项可用于在random标头中生成非均匀伪随机数字。下面的示例代码演示了一些可能的非统一分布:
#include <iostream>
#include <iomanip>
#include <string>
#include <map>
#include <random>
int main()
{
std::random_device rd;
std::mt19937 e2(rd());
//
// Distribtuions
//
std::normal_distribution<> dist(2, 2);
//std::student_t_distribution<> dist(5);
//std::poisson_distribution<> dist(2);
//std::extreme_value_distribution<> dist(0,2);
//std::lognormal_distribution<> dist(1.6, 0.25);
//std::exponential_distribution<> dist(1);
std::map<int, int> hist;
for (int n = 0; n < 10000; ++n) {
++hist[std::round(dist(e2))];
}
for (auto p : hist) {
std::cout << std::fixed << std::setprecision(1) << std::setw(2)
<< p.first << ' ' << std::string(p.second/200, '*') << '\n';
}
}
使用普通分发,您会看到与此类似的输出:
-5
-4
-3
-2 *
-1 ***
0 ******
1 ********
2 *********
3 ********
4 ******
5 ***
6 *
7
8
9