C++ 中的 Random() 效率

Random() efficiency in C++

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

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

那怎么会是随机的呢?

其他人已经解释了为什么每次都是相同的序列,但这是用 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

实际执行时间当然取决于您的平台,但它非常简单,结合乘法和除法或移位:

What common algorithms are used for C's rand()?

我认为您不必担心。如果您需要大量随机数,那么另一个随机源可能是您更好的选择。

如果您正在寻找调整,将 rand() 的结果拆分为单独的数字以便每次调用获得多个结果如何。

这种方式非常简单有效,只需要设置种子:

#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;     
}

要解决在 2 次运行中获得相同模式的问题,只需添加函数 randomize()