我正在编写函数,需要找到1-10之间的随机数。最简单的方法之一是使用随机() libc调用。我要经常使用这个函数。但我不知道它的效率有多高。如果有人对随机()的效率有想法,那会有帮助吗?
我还注意到,随机()在2次运行中给出了相同的模式。
int main()
{
for(int i=0;i<10;i++)
{
cout << random() % 10 << endl;
}
}第一次输出:- 3 6 7 5 3 5 6 2 9 1
第二次我也得到了同样的输出。
那怎么会是随机的?
发布于 2015-01-31 19:14:04
其他人解释了为什么每次都是相同的序列,但这就是用C++生成随机数的方法
#include <random>
int main() {
std::random_device rd{}; //(hopefully) truly random device
std::mt19937 engine{rd()}; //seed a pseudo rng with random_device
std::uniform_int_distribution<int> d(1,10); //1 to 10, inclusive
int RandNum = d(engine); //generate
return 0;
}http://en.cppreference.com/w/cpp/numeric/random
发布于 2015-01-31 19:51:02
当然,实际的执行时间取决于您的平台,但是它几乎是直接的,是乘法和除法或移位的耦合:
What common algorithms are used for C's rand()?
我觉得你不应该担心。如果你需要大量的随机数,那么另一个随机源可能是一个更好的选择。
如果您正在寻找调整,那么将结果从rand()分割到单个数字以获得每个调用的几个结果如何?
发布于 2015-01-31 22:15:00
这种方法非常简单有效,只需设置种子:
#include <iostream>
#include <stdlib.h>
#include <time.h>
using namespace std;
int main(){
srand(time(NULL));
for(int i=0;i<10;i++)
cout << rand() % 10 << endl;
}https://stackoverflow.com/questions/28255262
复制相似问题