gpt4 book ai didi

ios - 如果我在 5 点或 5 :01, 调用 arc4random_uniform(6),我会得到相同的数字吗?

转载 作者:行者123 更新时间:2023-11-28 18:29:46 27 4
gpt4 key购买 nike

我正在制作一个 iOS 骰子游戏,一位 Beta 测试员说他喜欢掷骰子已经预先确定的想法,因为我使用 arc4random_uniform(6)。我不确定他们是不是。因此,撇开代码可能连续选择相同数字的可能性不谈,如果我在 5 秒或 10 秒内点击骰子,我会生成不同的数字吗?

最佳答案

您的测试人员可能正在考虑软件随机数生成器实际上是随机的想法。它们的输出并不像掷骰子这样的物理过程那样真正随机:它由生成器保持或给出的某种状态决定。

PRNG 的一个简单实现是“线性同余生成器”:标准库中的函数 rand() 使用了这种技术。它的核心是一个简单的数学函数,每个输出都是通过将前一个输入作为输入来生成的。因此,它需要一个“种子”值,并且——这就是您的测试人员所考虑的——您获得的输出值序列完全由种子值决定

如果您使用 rand() 创建一个简单的 C 程序,您可以(事实上必须)使用配套函数 srand()(即“seed rand” ) 给 LCG 一个起始值。如果您使用常量作为种子值:srand(4),您每次都会以相同的顺序从 rand() 中获得相同的值。

rand() 获取任意——注意,不是随机——种子的一种常见方法是使用当前时间:srand(time (空))。如果你这样做了,并且足够快地重新播种和生成一个数字,time() 的返回没有改变,你确实会看到 rand() 的相同输出>.

这不适用于 arc4random():它不使用 LCG,也不与 rand() 共享此特性。它被认为* "cryptographically secure" ;也就是说,它的输出与真实的物理随机性无法区分。

这部分是由于 arc4random() 在您使用它时自行重新播种,并且播种本身是基于操作系统收集的不可预测的数据.决定输出的状态完全在算法内部;作为普通用户(即,不是攻击者),您不会查看、设置或以其他方式与该状态交互。

所以不,arc4random() 的输出不能可靠地由您重复。但是,确实存在可重复的伪随机算法,您当然可以使用它们进行测试。


*维基百科指出,在过去几年中发现了弱点,它可能不再可用于密码学。不过,只要不涉及金钱,您的游戏应该没问题!

关于ios - 如果我在 5 点或 5 :01, 调用 arc4random_uniform(6),我会得到相同的数字吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35803345/

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