首页 >后端开发 >C++ >如何在 C 中生成特定范围内真正均匀的随机数?

如何在 C 中生成特定范围内真正均匀的随机数?

Barbara Streisand
Barbara Streisand原创
2024-12-25 15:58:10155浏览

How can I generate truly uniform random numbers within a specific range in C  ?

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

在指定区间 [min, max] 内生成随机数] 统一地,应遵循以下准则考虑:

避免使用 rand() 和模运算符

使用 rand() 和模运算符,如图所示在给定的代码片段中,可能不会产生均匀分布的随机数。它取决于 RAND_MAX 的范围和值。

C 11 均匀整数分布

使用 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';});
}

Boost.Random

如果 C 11 不可用,您可以使用Boost.Random,提供类似于 C 11 随机数生成的接口设施。

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

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