在指定区间 [min, max] 内生成随机数] 统一地,应遵循以下准则考虑:
使用 rand() 和模运算符,如图所示在给定的代码片段中,可能不会产生均匀分布的随机数。它取决于 RAND_MAX 的范围和值。
使用 C 11,您可以利用 std::uniform_int_distribution 在 a 内生成随机数range:
#include <iostream> #include <random> int main() { const int range_from = 0; const int range_to = 1000; std::random_device rand_dev; std::mt19937 generator(rand_dev()); std::uniform_int_distribution<int> distr(range_from, range_to); std::cout << distr(generator) << '\n'; }
C 11 提供了具有各种分布的附加随机数生成器,例如如伯努利、泊松和
要随机洗牌容器,请使用std::shuffle:
#include <iostream> #include <random> #include <vector> int main() { std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator); std::for_each(vec.begin(), vec.end(), [](auto i){std::cout << i << '\n';}); }
如果 C 11 不可用,您可以使用Boost.Random,提供类似于 C 11 随机数生成的接口设施。
以上是如何在 C 中生成特定范围内真正均匀的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!