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 enrandom(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.
Puede agregar una secuencia de bytes como aleatoriedad a arc4random usando: arc4random_addrandom()
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.