我正在使用Swift/MacOS_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)
}
}
我期望得到相对均匀的随机性,但实际上出现了明显的规律:
稍微放大一下左下角:
(我在每32行和列都将颜色更改为黑色,以查看是否与2的幂对齐)。
有什么线索能够解释这些规律吗?我已经尝试过:
- 用
rand()
替换arc4random。 - 在每次调用arc4random_uniform之前添加
arc4stir()
。 - 移动显示(以确保该模式存在于数据中,而不是显示故障)。
有关下一步的想法?
drand48()
(使用srand48(Int)
进行种子初始化),它的随机性与arc4random()
一样好,并返回0到1之间(不包括1)的Double类型。另请参阅:http://nshipster.com/random/ - Kametrixom