(-1) ^ k со случайным k либо 0, либо 1 - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу, чтобы что-то происходило, когда (-1) ^ k равно 1 и когда его -1 -> k генерируется случайным образом.

Я пробовал это, но это не работает

let test:Int32 = -1
let leftOrRight:CGFloat = pow(CGFloat(test),random(min:0,max:1))

func random(min : CGFloat, max : CGFloat) -> CGFloat{
    return random() * (max - min) + min
}

leftOrRight всегда NaN.

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Если вы используете Swift 4 / 4.1 , то это должно сработать:

let leftOrRight = 2 * (Double(arc4random_uniform(2)) - 0.5)

Если вы используете Swift 4.2 , вы можете использовать:

let array: [CGFloat] = [-1, 1]
let leftOrRight: CGFloat = array.randomElement()

Если вы хотите, чтобы leftOrRight был случайным логическим значением:

let leftOrRight: Bool = Bool.random()

Подробнее о том, что будет в Swift 4.2, можно узнать здесь .

0 голосов
/ 05 сентября 2018

Вы пытаетесь сгенерировать CGFloat значение -1.0 или 1.0 с равной вероятностью. Вы можете сделать это, сгенерировав значение 0 или 1 (используя arc4random_uniform(2)) и протестировав его перед присвоением значения CGFloat:

let leftOrRight: CGFloat = arc4random_uniform(2) == 0 ? 1 : -1

В Swift 4.2 (Xcode 10) вы можете использовать Bool.random(), чтобы упростить его:

let leftOrRight: CGFloat = Bool.random() ? 1 : -1
...