结合rand()和srand()以提高性能
Combining rand() and srand() for better performance
所以,我正在制作一个我想具有生成随机数的函数的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库可能是个好主意。
相关文章:
- 为什么我不能将 rand() 与数组的大小一起使用?
- 为什么新的随机库比std::rand()更好
- 为什么rand()的使用被认为是不好的
- C++使用 rand 定义函数语法
- 为什么 rand 不在我的代码中生成随机数?
- 为什么 CWE 认为 rand() 具有潜在危险
- 在 c++ 中,rand() 在执行有调试和不带调试的程序时生成不同的结果
- 从 16UC3 到 8UC3 的高性能 OpenCV 矩阵转换
- Rand() 没有显示随机数,请帮助我了解出了什么问题:)
- Rand()大小写开关在多次迭代后运行到无穷大
- rand()函数在特定问题中的工作
- 为什么 someNumber = rand() & 100 + 1;不产生错误?
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 如何从高性能的输入迭代器返回变体?
- 如何生成比用户使用 rand() 函数输入的数字大 5-10% 的数字?
- rand()/RAND_MAX 函数每次打印 1
- 使用 rand() 和 srand() 有问题
- " rand()%3-1 " 在 C++ 中是什么意思?
- 如何使 rand() 更加随机?
- C++ 更深入地了解 rand() 和 srand() 内部