我正在编写函数,我需要找到1到10之间的随机数。最简单的方法之一是使用random()libc调用。我将使用这个功能很多。但我不知道它会有多高效。如果有人知道random()的效率会有帮助吗?
另外我注意到random()在2次运行中给出了相同的模式。
int main()
{
for(int i=0;i<10;i++)
{
cout << random() % 10 << endl;
}
}
第一次输出: - 3 6 7 5 3 5 6 2 9 1
第二次我也得到了相同的输出。
那怎么来随机?
答案 0 :(得分:6)
其他人已经解释了为什么它每次都是相同的序列,但这就是你用 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;
}
答案 1 :(得分:2)
实际的执行时间当然取决于你的平台,但它非常直接,偶数乘法和分割或转移:
What common algorithms are used for C's rand()?
我认为你不应该担心。如果您需要大量随机数,那么另一个随机来源可能是您的最佳选择。
如果您正在寻找调整,如何将结果从rand()分成单个数字,以便每次调用获得多个结果。
答案 2 :(得分:0)
这种方式非常简单有效,您只需要设置种子:
#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;
}
答案 3 :(得分:0)
要解决在2次运行中获得相同模式的问题,只需添加函数randomize()