J'ai besoin de créer une valeur booléenne aléatoire dans mon jeu, dans Swift.
Il s'agit essentiellement, si Oui (ou 1), de générer un objet, si Non (ou 0), de générer l'autre.
Jusqu'à présent, en regardant cette question et une question similaire ici, j'ai trouvé ceci:
let randomSequenceNumber = Int(arc4random_uniform(2))
Maintenant ça marche, mais ça me semble biaisé à 0 ... comme ridiculement biaisé ...
Voici comment j'utilise ensuite la valeur:
if(randomSequenceNumber == 0)
//spawn object A
else
//spawn object B
Existe-t-il un meilleur moyen de mettre en œuvre cela en utilisant une valeur booléenne aléatoire? Ce n'est pas un parti pris pour une certaine valeur?
Mise à jour
Un peu d'expérience pour voir combien 1
's vs 0
ont été générés dans 10 000 appels:
func experiment() {
var numbers: [Int] = []
var tester: Int = 0
var sum = 0
for i in 0...10000 {
tester = Int(arc4random_uniform(2))
numbers.append(tester)
print(i)
}
for number in numbers {
sum += number
}
print("Total 1's: ", sum)
}
Test 1: Console Output: Total 1's: 4936
Test 2: Console Output: Total 1's: 4994
Test 3: Console Output: Total 1's: 4995
On dirait Apple les ingénieurs écoutent
let randomBool = Bool.random()
extension Bool {
static func random() -> Bool {
return arc4random_uniform(2) == 0
}
}
// usage:
Bool.random()