Question

D'après ce que je peux rassembler arc4random() génère beaucoup mieux nombres aléatoires que rand() commet, mais je ne l'ai pas vu un moyen de semences, et Je voudrais tout comme l'utilisation srand(). Est-il possible?

Était-ce utile?

La solution

Ce n'est pas ce que arc4random est conçu pour faire. Comme l'indique la documentation:

  

La fonction arc4random() fournit un pseudo-aléatoire de haute qualité 32 bits   nombre très rapidement. graines de arc4random() se base sur une base régulière de   le noyau fort sous-système de nombres aléatoires décrit dans random(4).

Comme il est re-graines se provenant d'une source d'entropie de toute façon, vous ne gagnez rien en ensemençant manuellement, et en fait, une telle méthode n'existe pas.

Autres conseils

Vous pouvez réellement faire dans iOS 9.

import GameKit

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

Selon les docs:

  

Arc4 à base de sources aléatoires ont des séquences initiales reproductibles. Si elle est utilisée pour l'obscurcissement que vous devez supprimer les valeurs N dès le départ, où N doit être un nombre plus grand que 768 pour assurer la séquence initiale est rincée.

Donc, tant que vous utilisez les mêmes données de semences (évidemment sans utiliser ! dans le code de production) et le même nombre de valeurs a diminué, vous obtiendrez les mêmes résultats.

Swift 3 J'utilise srand48() et drand48() quand j'ai besoin d'une valeur tête de série. J'ai fait cette fonction qui semble fonctionner assez bien pour mes besoins:

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

Vous pouvez ajouter une séquence d'octets comme aléatoire à arc4random en utilisant: arc4random_addrandom()

http: // développeur .apple.com / bibliothèque / mac / # documentation / Darwin / Référence / manpages / man3 / arc4random.3.html

Vous n'avez pas besoin réellement de semences ... il se graines sur le premier appel. Consultez la documentation en appelant

man arc4random

dans votre shell. La ligne correspondante, sous DESCRIPTION, est:

There is no need to call arc4random_stir() before using arc4random(),
since arc4random() automatically initializes itself.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top