Swift-播种arc4random_uniform?还是另类?

Swift-播种arc4random_uniform?还是另类?,第1张

Swift-播种arc4random_uniform?还是另类?

事实证明,srand / rand组合可以满足我的需求,导致结果显示不“均匀分布”的问题是我自己的逻辑中的一个错误。

供参考,本质上我是在做这件事(实际上,它要复杂得多,但出于演示目的):

let start = 0let end = 100for x in 0..<10 {   let seed = UInt32(x)   srand(seed)   let randomNumber = Double(rand()) % (end + 1 - start) + start   // Do something with random number}

用上面更简单的形式编写的问题变得很明显。我在循环的每次迭代中都重新播种,种子值只是线性增加。因此,随机结果也呈线性增加。

简单的解决方案是不重新种子每次循环迭代,而是在循环之前种子一次。例如:

let start = 0let end = 100let seed = UInt32(100)srand(seed)for x in 0..<10 {   let randomNumber = Double(rand()) % (end + 1 - start) + start   // Do something with random number}

通过此简单的更改,结果值似乎在示例中使用的0到100范围内确实均匀分布。我不能确定是否有“更统一”的方式来做到这一点,但是我认为这是因为我读过arc4random比drand
/ rand / erand / etc函数“更优越”,以产生统一的随机数,但是至少这似乎符合我的需求。

如果其他人想出一种更好的方法来实现我所追求的目标,我将把这个问题搁置一段时间。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5622508.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存