首页 >后端开发 >C++ >如何用 C 语言生成真正均匀的随机数?

如何用 C 语言生成真正均匀的随机数?

Susan Sarandon
Susan Sarandon原创
2024-12-22 19:42:11629浏览

How Can I Generate Truly Uniform Random Numbers in C  ?

在整个范围内均匀生成随机数

您寻求生成在指定间隔 [min, max] 内均匀分布的随机数。但是,您当前的方法正在生成围绕单个点聚集的数字。

避免 rand()

rand() 函数对于生成均匀分布通常不可靠。它依赖于可能引入偏差的模运算符。

C 11 均匀分布

在 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 可以随机重新排序容器的元素。

Boost.Random Alternative

如果 C 11 不可用,请考虑使用 Boost.Random,它提供类似的功能。

以上是如何用 C 语言生成真正均匀的随机数?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn