C ++中的Random()效率

时间:2015-01-31 18:52:38

标签: c++ c linux performance random

我正在编写函数,我需要找到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

第二次我也得到了相同的输出。

那怎么来随机?

4 个答案:

答案 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;
}

http://en.cppreference.com/w/cpp/numeric/random

答案 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()