您寻求生成在指定间隔 [min, max] 内均匀分布的随机数。但是,您当前的方法正在生成围绕单个点聚集的数字。
rand() 函数对于生成均匀分布通常不可靠。它依赖于可能引入偏差的模运算符。
在 C 11 中,考虑使用 std::uniform_int_distribution 以获得更可靠的解决方案:
#include <iostream> #include <random> int main() { const int range_from = min; const int range_to = max; 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 可以随机重新排序容器的元素。
如果 C 11 不可用,请考虑使用 Boost.Random,它提供类似的功能。
以上是如何用 C 语言生成真正均匀的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!