Насколько случайным является 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.
- Попробуйте заменить Int (arc4random_uniform (100)) всего на 100.