- windows下使用gcc编译器,如果使用random库文件不能产生随机数,而是一固定值。【下面
get_random_float2()
在linux中可以产生随机数】 - windows下使用gcc编译器要想产生真随机数的话,目前我感觉最好的做法是使用rand()函数,但rand()函数也有问题,就是产生的是伪随机数。需要搭配srand函数。
- srand函数的位置很重要,如下所示,如果srand函数放在
get_random_float1()
函数的内部,那么产生的也是一个固定的值。所以项目中最好将srand函数放在全局语句中。
#include <iostream>
#include <ctime>
#include <random>
using namespace std;
inline float get_random_float1()
{
auto r= (double) rand() / (RAND_MAX);
return r;
}
inline float get_random_float2()
{
std::random_device dev;
std::mt19937 rng(dev());
std::uniform_real_distribution<float> dist(0.f, 1.f);
return dist(rng);
}
int main(){
srand((unsigned)time(NULL));
for(int i=1;i<=15;i++)
cout<<get_random_float1()<<endl;
cout<<endl;
for(int i=1;i<=15;i++)
cout<<get_random_float2()<<endl;
}