Swift 为什么使用Float(arc4random())/0xFFFFFFFF而不是drand()

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

我是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)
生成一个介于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;线性同余算法太容易被破坏