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;
}
实际执行时间当然取决于您的平台,但它非常简单,结合乘法和除法或移位:
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()
我正在编写函数,我需要在其中找到 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;
}
实际执行时间当然取决于您的平台,但它非常简单,结合乘法和除法或移位:
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()