type number has arc4random_uniform iphone random arc4random

iphone - number - swift random



sembrando arc4random() en iphone sdk (5)

En Swift 3 estoy usando srand48() y drand48() cuando necesito un valor semilla. Hice esta función que parece funcionar lo suficientemente bien para mis necesidades:

func seeded_rand(seed:Int, min:Double, max:Double) -> Int { srand48(seed) return Int(round(drand48() * (max-min)) + min) }

De lo que puedo reunir, arc4random () genera números aleatorios mucho mejores que rand (), sin embargo, no he visto una forma de sembrarlo, y me gustaría usar srand (). ¿Hay alguna manera?


En realidad no es necesario sembrarlo ... se siembra en la primera llamada. Echa un vistazo a la documentación llamando

man arc4random

en tu concha La línea correspondiente, bajo DESCRIPCIÓN, es:

There is no need to call arc4random_stir() before using arc4random(), since arc4random() automatically initializes itself.


Eso no es lo que arc4random está diseñado para hacer. Como indica la documentación:

La función arc4random() proporciona un número pseudoaleatorio de alta calidad de 32 bits muy rápidamente. arc4random() siembra regularmente desde el subsistema de número aleatorio fuerte del núcleo descrito en random(4) .

De todos modos, como se vuelve a sembrar desde una fuente de entropía, no se gana nada si se lo siembra manualmente y, de hecho, tal método no existe.



Realmente puedes hacer esto en iOS 9.

import GameKit let source = GKARC4RandomSource(seed: "hello world".data(using: .utf8)!) source.dropValues(1024) source.nextInt() // <-- your number

Según los documentos:

Las fuentes aleatorias basadas en Arc4 tienen secuencias iniciales repetibles. Si se utiliza para la ofuscación, debe eliminar los valores de N desde el principio, donde N debe ser cualquier número mayor que 768 para garantizar que la secuencia inicial se vacíe.

Entonces, mientras use los mismos datos semilla (obviamente sin usar ! En el código de producción) y el mismo número de valores eliminados, obtendrá los mismos resultados.