根据参考链接,std::uniform_real_distribution生成的随机数值域为 [ a , b ) [a,b) [a,b),所以如果要生成 [ a , b ] [a,b] [a,b],可以这样:
#include <random>
#include <iostream>
#include <cfloat>
int main() {
std::mt19937 mt(std::random_device{}());
std::uniform_real_distribution<double> dist(10, std::nextafter(20, DBL_MAX));
for (int i=0; i<16; ++i)
std::cout << dist(mt) << "\n";
}
得到
[
10
,
20
]
[10,20]
[10,20]的随机实数。
如果多次运行发现结果都一样,说明你的编译器不支持std::random_device,可以这样:
#include <random>
#include <iostream>
#include <cfloat>
#include <time.h>
int main() {
std::mt19937 mt(static_cast<std::mt19937::result_type>(time(nullptr)));
std::uniform_real_distribution<double> dist(10, std::nextafter(20, DBL_MAX));
for (int i=0; i<16; ++i)
std::cout << dist(mt) << "\n";
}