使用 timer进行随机种子生成,用rand基于RAND_MAX样本空间进行随机数字生成主,除以最大值 ,就能生成0-1的随机浮点数字。
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <time.h>
int main() {
time_t t;
srand((unsigned)time(&t));
cout << " Random floats based on RAND_MAX: " << RAND_MAX << endl;
for (int i = 0; i < 20; i++) {
cout << setprecision(6) << float(rand()) / float(RAND_MAX) << endl;
}
但这个方法有些问题,不知道为什么,我生成的随机数字有些不太随机,请看三次不同的输出结果
看到了吗,第一个随机数字非常接近。这个还没有找到原因。
后来考虑用c++自带的 随机生成库 random用来生成随机数,这个会使用更科学的随机算法进行随机数字生成,
#include <iostream>
#include <cstdlib>
#include <iomanip>
#include <random>
#include <time.h>
using namespace std;
constexpr int FLOAT_MIN = 0;
constexpr int FLOAT_MAX = 1;
....
std::random_device rd;
std::default_random_engine eng(rd());
std::uniform_real_distribution<float> distr(FLOAT_MIN, FLOAT_MAX);
cout << "generate the random float between 0-1, with random lib\n";
for (int i = 0; i < 10; ++i) {
cout << setprecision(6)
<< distr(eng) << "\n";
}
连续运行三次得到的结果感觉没有特别诡异的随机数了。