如何在 c++ 中生成两个双精度数之间的随机数,这些数字应该看起来像 xxxxx,yyyyy 。
原文由 Radi 发布,翻译遵循 CC BY-SA 4.0 许可协议
这类似于我上面的答案,但应该适用于 C++11 及更高版本。
#include <iostream>
#include <random>
#include <array>
#include <algorithm>
#include <functional>
/**
* a function that will generate pseudo random numbers in a normal distribution
* @param lb is the lower bound of the distribution (inclusive)
* @param ub is the upper bound of the distribution (inclusive)
* @return a pseudo random number in the range [lb, ub]
*/
auto generate_random_double(double lb, double ub)
{
std::random_device rd{};
std::array<double, std::mt19937::state_size> seed_data{};
std::generate(seed_data.begin(), seed_data.end(), std::ref(rd));
std::seed_seq seq(std::begin(seed_data), std::end(seed_data));
auto eng = std::mt19937{ seq };
const auto randDouble = std::uniform_real_distribution<>{ lb,ub };
return std::bind(randDouble, eng);
}
原文由 Ryan Zurrin 发布,翻译遵循 CC BY-SA 4.0 许可协议
3 回答2k 阅读✓ 已解决
2 回答3.9k 阅读✓ 已解决
2 回答3.2k 阅读✓ 已解决
1 回答3.2k 阅读✓ 已解决
4 回答2.9k 阅读
1 回答2.7k 阅读✓ 已解决
3 回答3.4k 阅读
就是这样
请记住每次程序启动时都使用适当的种子调用 srand()。
[编辑] 这个答案已经过时,因为 C++ 得到了它的原生非 C 随机库(参见 Alessandro Jacopsons 的答案)但是,这仍然适用于 C