结合rand()和srand()以提高性能

Combining rand() and srand() for better performance

本文关键字:高性能 rand 结合 srand      更新时间:2023-10-16

所以,我正在制作一个我想具有生成随机数的函数的dll。我想知道这些选项中的哪一个更有效(明智)。

这个只是在DLL中发挥功能,使我可以获取一个随机数。

int getRand(unsigned int seed) {
    int rNum;  // Random Number.
    srand(seed);
    rNum = (rand() % // Whatever I need here.
}

或,在应用程序中仅使用srand(time(nullptr))rand()会更好吗?

谢谢,

约翰尼p。

实际上没有任何需要创建一个将呼叫srand()rand()的呼叫结合起来的函数。

srand()用于播种(即初始化)随机数序列。然后,随后并重复调用rand()的调用实际生成随机数。(rand()更新随机数生成器的内部状态,因此(通常)在下次调用时不会再次生成相同的数字。)

如果您每次调用rand()之前调用srand(),则该序列将每次重新定位。如果每次通过的种子是相同的,则您的功能将返回相同的随机数

因此

您也可能对C 11中的<random>标头提供的随机数生成框架感兴趣。这是示例代码(主要是从cppreferency复制):

#include <random>
#include <iostream>
int main()
{
  /* Initialise and seed. Do this only once. */
  std::random_device rd;
  std::mt19937 gen(rd());
  /* Define how to use the raw random numbers, i.e.
     a probability distribution. In this case a
     uniform distribution with six possible integer
     events. */
  std::uniform_int_distribution<> dis(1, 6);
  /* Generate a series of random events. No reseeding. */
  for(int n=0; n<10; ++n)
      std::cout << dis(gen) << ' ';
  std::cout << std::endl;
}

cppReference对<random>标头及其提供的许多选项具有很好的描述:http://en.cppreference.com/w/cpp/numeric/random。

大多数是受Boost Random Library的启发,它提供了更多选项:http://www.boost.org/doc/libs/1_52_0/doc/doc/doc/html/boost_random.html(链接到1.52.02.02.02.0版本)。因此,如果您不能使用C 11,或者需要标准未提供的功能,则使用Boost库可能是个好主意。