Swift 为什么使用Float(arc4random())/0xFFFFFFFF而不是drand()
我是Swift新手,刚刚在教程中看到了用于生成随机角度的代码Swift 为什么使用Float(arc4random())/0xFFFFFFFF而不是drand(),swift,random,cgfloat,Swift,Random,Cgfloat,我是Swift新手,刚刚在教程中看到了用于生成随机角度的代码 func random() ->CGFloat{ return CGFloat(Float(arc4random()) / 0xFFFFFFFF) } func random(#min: CGFloat, max:CGFloat) ->CGFloat{ return random()*(max-min)+min } 我想知道行是否返回CGFloat(Float(arc4random())/0xffffff
func random() ->CGFloat{
return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min: CGFloat, max:CGFloat) ->CGFloat{
return random()*(max-min)+min
}
我想知道行是否返回CGFloat(Float(arc4random())/0xffffff)
生成一个介于0和1.0之间的随机浮点数?那么为什么不能直接使用drand()?这两个功能之间有什么区别吗?谢谢 drand48()
适用于许多应用程序,但不安全(换句话说是可预测的)arc4random()
while的设计考虑到了安全性
我认为苹果正是因为这个原因才把人们推到arc4random()
。因此,为了回答您的问题:如果您生成随机数来模拟某些东西,drand48
应该可以,但是如果您生成随机数来保护某些东西,那么请使用arc4random()
(或者更安全的方法,如SecRandomCopyBytes()
)
来自ONLamp的: drand48()、lrand48()和mrand48() drand48()函数是构成SystemV随机数生成器的许多函数之一。根据Solaris文档,该算法使用“著名的线性同余算法和48位整数算法”。函数drand48()返回一个大于或等于0.0且小于1.0的双精度数字,而lrand48()和mrand48()函数返回指定整数范围内的随机数。与random()一样,这些函数为模拟和游戏提供了优秀的随机数,但不应用于安全相关的应用,如拾取加密密钥或模拟一次性PAD;线性同余算法太容易被破坏