arc4random(mac os x)的随机性如何?(或者我做错了什么?)

pme*_*yer 14 random macos arc4random ios swift

我正在使用swift/mac_os_x中优化的生活游戏实现.第一步:随机化一大块细胞(50%活着).

码:

for(var i=0;i<768;i++){
  for(var j=0;j<768;j++){
    let r = Int(arc4random_uniform(100))
    let alive = (aliveOdds > r)
    self.setState(alive,cell: Cell(tup:(i,j)),cells: aliveCells)
  }
}
Run Code Online (Sandbox Code Playgroud)

我期待相对均匀的随机性.我得到的有明确的模式:

大图

放大左下角:

放大了

(我已经在每32行和每列上将颜色更改为黑色,以查看图案是否排列为2的任何幂).

是什么导致这些模式?我试过了:

  • 用arc替换arc4random rand().
  • arc4stir()在每个arc4random_uniform调用之前添加
  • 移动显示器(确保模式在数据中,而不是显示故障)

关于下一步的想法?

use*_*690 1

  1. 您无法在任何可显示集 (16*(2**31) - 1) 上命中句点或 arc4random 的许多规则非均匀簇。

这些绝对是内存损坏/未初始化的迹象。例如,您正在初始化 768x768 字段,但向我们显示 1024xsomething 字段。

  1. 尝试将 Int(arc4random_uniform(100)) 替换为 100 来查看。