Насколько случайным является arc4random (mac os x)? (или что я делаю неправильно?)

Я играю с оптимизированной реализацией жизни в 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().
  • добавление arc4stir() перед каждым вызовом arc4random_uniform
  • перемещение дисплея (чтобы гарантировать, что шаблон находится в данных, а не сбой отображения)

Идеи на следующих шагах?

Ответы

Ответ 1

  • Вы не можете поразить период или много регулярных неоднородных кластеров arc4random на любом отображаемом наборе (16 * (2 ** 31) - 1).

Это определенно признаки поврежденной/неинициализированной памяти. Например, вы инициализируете поле 768x768, но вы показываете нам поле 1024xsomething.

  1. Попробуйте заменить Int (arc4random_uniform (100)) всего на 100.