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

时间:2015-06-14 15:01:35

标签: ios macos swift random arc4random

我正在使用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)
  }
}

我期待相对均匀的随机性。我得到的确定模式:

Large image

在左下角稍微放大一下:

zoomed in

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

有什么迹象导致这些模式?我试过了:

  • 将arc4random替换为rand()
  • 在每次arc4random_uniform调用之前添加arc4stir()
  • 移动显示屏(确保图案在数据中,而不是显示故障)

下一步的想法?

1 个答案:

答案 0 :(得分:1)

  1. 您无法在任何可显示的集合(16 *(2 ** 31) - 1)上点击周期或许多常规非均匀的arc4random簇。
  2. 这些肯定是已损坏/未初始化内存的迹象。例如,您正在初始化768x768字段,但您向我们显示1024xsomething字段。

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