C++ 从 1 到一个非常大的数(例如 2500 万)的随机数
C++ Random number from 1 to a very large number (e.g. 25 million)
你会如何制作一个生成 1 到 2500 万个随机数的函数?
我考虑过使用 rand()
,但我认为最大数量 RAND_MAX
是 = 32000(大约)是否正确?
有没有解决这个问题的方法,一种既不降低选择极低号码的概率也不增加选择高/中号码的可能性的方法?
编辑:@Jamey D 的方法完全独立于 Qt。
看看ran3
http://www.codeforge.com/read/33054/ran3.cpp__html
你应该可以从中得到你想要的。
Ran3(至少在我还在做计算建模的时候)比 rand() 更快,分布更均匀,尽管那是几年前的事了。它returns一个随机整数值。
例如从上面的link获取源码:
int main() {
srand(time(null));
int randomNumber = ran3(rand()) % 25000000;
int nextRandomNumber = ran3(randomNumber);
}
您可以(应该)使用新的 C++11 std::uniform_real_distribution
#include <random>
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> distribution(1, 25000000);
//generating a random integer:
double random = distribution(gen);
你会如何制作一个生成 1 到 2500 万个随机数的函数?
我考虑过使用 rand()
,但我认为最大数量 RAND_MAX
是 = 32000(大约)是否正确?
有没有解决这个问题的方法,一种既不降低选择极低号码的概率也不增加选择高/中号码的可能性的方法?
编辑:@Jamey D 的方法完全独立于 Qt。
看看ran3
http://www.codeforge.com/read/33054/ran3.cpp__html
你应该可以从中得到你想要的。
Ran3(至少在我还在做计算建模的时候)比 rand() 更快,分布更均匀,尽管那是几年前的事了。它returns一个随机整数值。
例如从上面的link获取源码:
int main() {
srand(time(null));
int randomNumber = ran3(rand()) % 25000000;
int nextRandomNumber = ran3(randomNumber);
}
您可以(应该)使用新的 C++11 std::uniform_real_distribution
#include <random>
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_real_distribution<> distribution(1, 25000000);
//generating a random integer:
double random = distribution(gen);