首页 > 后端开发 > C++ > 如何在 C 中生成真正的随机数:'rand()”足够吗?

如何在 C 中生成真正的随机数:'rand()”足够吗?

Patricia Arquette
发布: 2024-12-24 00:21:20
原创
286 人浏览过

How to Generate Truly Random Numbers in C  :  Is `rand()` Enough?

如何在 C 中生成真正的随机数

开发需要生成随机数的应用程序时,例如在掷骰子游戏中,确保生成的数字真正随机并且不偏向某些值至关重要。

中提供的代码片段该问题使用 rand() 函数生成给定范围内的随机数。然而,从输出中观察到,重复生成相同的数字,表明缺乏随机性。

问题:

问题是由于使用模数引起的运算符 (%) 将随机数映射到特定范围。虽然这种方法可能看起来很方便,但它可能会引入偏差,具体取决于随机数生成器的实现。

解决方案:

解决此问题并在 C 中生成真正的随机数,建议使用 C 11 中引入的功能。以下代码演示了另一种方法:

#include <random>
#include <iostream>

int main() {
    std::random_device dev;
    std::mt19937 rng(dev());
    std::uniform_int_distribution<std::mt19937::result_type> dist6(1, 6);  // distribution in range [1, 6]

    std::cout << dist6(rng) << std::endl;
}
登录后复制

在此代码中, std::random_device 类提供熵源来初始化 Mersenne Twister 随机数生成器 (std::mt19937)。 std::uniform_int_distribution 类在所需范围内创建一个分布对象(在本例中为 [1, 6])。

调用 dist6(rng) 时,会生成指定范围内的真正随机整数。通过采用这些 C 11 功能,开发人员可以实现更多随机性并避免应用程序中出现有偏差的结果。

以上是如何在 C 中生成真正的随机数:'rand()”足够吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板