0

所以,我正在制作一个 DLL,我想要一个函数来生成随机数。我想知道这些选项中哪个更有效(性能方面)。

这只是在 DLL 中创建一个函数,允许我获取一个随机数。

int getRand(unsigned int seed) {
    int rNum;  // Random Number.

    srand(seed);
    rNum = (rand() % // Whatever I need here.
}

或者,只是在应用程序中使用srand(time(nullptr))andrand()会在性能上更好吗?

谢谢,

约翰尼·P。

4

1 回答 1

5

实际上没有任何必要创建一个将调用srand()与一个 to结合起来的函数rand()

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

如果您在调用srand()之前每次调用rand(),则每次都会重新初始化序列。如果每次传递的种子都相同,则您的函数每次都将返回相同的随机数。

因此,无论如何,这两个电话都必须分开。

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

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

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

其中大部分灵感来自 Boost 随机库,它提供了更多选项: http: //www.boost.org/doc/libs/1_52_0/doc/html/boost_random.html(链接到 1.52.0 版本)。因此,如果您不能使用 C++11,或者您需要标准未提供的功能,那么使用 Boost 库可能是一个好主意。

于 2012-11-07T03:02:46.773 回答