(-1)^ k,随机k为0或1

问题描述 投票:0回答:2

当(-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。

swift random
2个回答
5
投票

您试图以相同的概率生成CGFloat-1.01.0值。你可以通过生成01(使用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

2
投票

如果您使用的是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()

如果你想要leftOrRightto是一个随机的布尔值:

let leftOrRight: Bool = Bool.random()

有关Swift 4.2中的更多信息,请查看here

© www.soinside.com 2019 - 2024. All rights reserved.