Tux*_*Tux 0 c++ random dll performance visual-c++
所以,我正在制作一个我希望有一个函数来生成随机数的DLL.我想知道哪些选项更有效(性能明智).
这个只是在DLL中创建一个函数,允许我得到一个随机数.
int getRand(unsigned int seed) {
int rNum; // Random Number.
srand(seed);
rNum = (rand() % // Whatever I need here.
}
Run Code Online (Sandbox Code Playgroud)
或者,只是使用srand(time(nullptr))和rand()在应用程序中性能更好?
谢谢,
约翰尼P.
实际上并不需要创建一个将调用srand()与一个调用结合起来的函数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;
}
Run Code Online (Sandbox Code Playgroud)
cppreference对<random>标题及其提供的许多选项有很好的描述: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库可能是个好主意.