您寻求一种在指定范围 [min, max] 内均匀生成随机数的方法。
rand 的缺陷
您当前使用 rand() 和模运算符可能无法确保均匀分布,因为它的行为取决于 RAND_MAX 和范围本身。
C 11 和统一范围生成
在 C 11 中,std:: Uniform_int_distribution 提供了专门针对此问题的解决方案需要:
#include <random> std::uniform_int_distribution<int> distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
的附加功能
header 提供了大量具有不同分布的随机数生成器,例如伯努利分布、泊松分布和正态分布。
容器洗牌
要洗牌容器,请使用std::shuffle:
#include <random> #include <vector> 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);
Boost.Random
如果使用 C 11 编译器不可行,请考虑 Boost.Random,它具有与C 11 对应物。
以上是如何在 C 中生成特定范围内的均匀分布随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!