web-dev-qa-db-ja.com

Swiftでランダムなブールを作成する

私のゲームでは、Swiftでランダムなブール値を作成する必要があります。

基本的には、はい(または1)の場合は1つのオブジェクトを生成し、いいえ(または0)の場合はもう1つのオブジェクトを生成します。

これまでのところ、 この質問 と同様の質問をここで見て、私はこれを見つけました:

let randomSequenceNumber = Int(arc4random_uniform(2))

今はそれは機能しますが、私には0へのバイアスのようです...途方もなくバイアスのように...

これは私が値を使用する方法です:

if(randomSequenceNumber == 0)
    //spawn object A
else
    //spawn object B

ランダムなブール値を使用してこれを実装するより良い方法はありますか?それは特定の値に偏っていませんか?

更新

実験のビット10は10,000回の呼び出しで生成されました:

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
29
Reanimation
import Foundation

func randomBool() -> Bool {
    return arc4random_uniform(2) == 0
}

for i in 0...10 {
    print(randomBool())
}

より高度なジェネレーターの場合、理論は利用可能です ここ

ベルヌーイ(または二項)分布チェックの基本的な理解 ここ

49
user3441734

Swift 4.2のXcode 10

Appleエンジニアが聞いているようです

let randomBool = Bool.random()
25
extension Bool {
    static func random() -> Bool {
        return arc4random_uniform(2) == 0
    }
}

// usage:
Bool.random()
16
Adam Waite