首页 > 后端开发 > C++ > 为什么 C 语言中重复使用'rand()”会产生可预测的序列?

为什么 C 语言中重复使用'rand()”会产生可预测的序列?

Susan Sarandon
发布: 2024-12-25 15:55:17
原创
513 人浏览过

Why Does Repeated `rand()` Usage in C   Produce Predictable Sequences?

函数调用中的随机初始化问题

在 C 语言中,rand() 函数通常用于生成随机数。然而,当在单个函数中重复调用时,它可以产生可预测的序列而不是真正的随机性。当需要多个唯一的随机值时,此行为可能会很麻烦。

要纠正此问题,您应该避免在每次调用 rand() 之前初始化随机生成器 srand()。相反,它应该只执行一次,最好在程序开始时执行。

问题解释

顺序不可预测的原因是 srand() 播种具有特定值的随机生成器。同一函数内的后续调用将使用相同的种子,从而产生一致的随机数序列。通过仅初始化生成器一次,它可以确保整个程序使用唯一的种子。

修订的代码:

int GenerateRandomNumber()
{
    static bool srand_initialized = false;

    if (!srand_initialized)
    {
        srand(time(0));  // Initialize random generator once
        srand_initialized = true;
    }

    return rand() % 3;
}
登录后复制

在此更新的代码中,srand () 仅在第一次调用GenerateRandomNumber() 之前初始化一次。这确保每次调用都会产生真正的随机值。

以上是为什么 C 语言中重复使用'rand()”会产生可预测的序列?的详细内容。更多信息请关注PHP中文网其他相关文章!

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