gpt4 book ai didi

c++ - 随机化种子会产生更多随机数吗?

转载 作者:搜寻专家 更新时间:2023-10-31 00:20:14 25 4
gpt4 key购买 nike

我有三个关于 RNG 的问题。

首先是哪些数据可用作种子。我一直在使用时间,但必须有其他容易获得的种子。

c++ 中有哪些容易获得的种子?

如果我根据 RNG 的下一个值以随机间隔重新播种 RNG,并从问题 1 的答案中随机选择种子,这是否会创建一个更难预测的伪随机链,因此更随机?

最后,在 C++ 中获取范围内随机数的最佳方法是什么?我一直在使用模数运算符,但我想要在范围内均匀分布的东西,而不是偏向于高或低,因为它会影响 AI 决策。

最佳答案

  1. 这取决于您需要rand 的目的。对于很多用途,time 是完全足够了。对于其他人则不然。我通常会读四个字节来自 /dev/random 在 Unix 机器上,恢复到 time 如果/dev/random 不可用。一个更有效的解决方案是使用更高分辨率的计时器,并散列过程或机器 ID。

  2. 除非您使用像 /dev/random 这样的东西来做。其他大部分可用值是非常可预测的。

  3. 如果 RAND_MAX 是范围的倍数,则模可以正常工作。如果它不是,唯一的解决办法是丢弃值:你总共有RAND_MAX + 1 个值,您需要 n。而且没有可能将所有 RAND_MAX + 1 值映射到 n 的映射,并且具有每个 n 的输入数量相同。通常的解决方案是喜欢:

    int limit = (RAND_MAX + 1) - (RAND_MAX + 1) % n;    int result = rand();    while ( result >= limit )        result = rand();    return result % n;

(我在这里假设您正在寻找范围内的结果[0...n)。而且 RAND_MAX + 1 不会溢出。)

最后,如果您担心随机值的质量,请意识到 rand() 的许多实现都不是特别好。您可能想切换到其中一种增强随机生成器。

关于c++ - 随机化种子会产生更多随机数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6439626/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com