【问题标题】:Why use Float(arc4random()) / 0xFFFFFFFF instead of drand()为什么使用 Float(arc4random()) / 0xFFFFFFFF 而不是 drand()
【发布时间】:2015-12-28 09:13:29
【问题描述】:

我是 Swift 新手,刚刚在教程中看到此代码用于生成随机角度。

func random() ->CGFloat{
    return CGFloat(Float(arc4random()) / 0xFFFFFFFF)
}
func random(#min: CGFloat, max:CGFloat) ->CGFloat{
    return random()*(max-min)+min
}

我想知道return CGFloat(Float(arc4random()) / 0xFFFFFFFF) 行是否会生成一个介于 0 和 1.0 之间的随机浮点数?那为什么不能只使用 drand() 呢?这两个功能有什么区别吗?谢谢!

【问题讨论】:

    标签: swift random cgfloat


    【解决方案1】:

    drand48() 适用于许多应用程序,但不安全(换句话说,可预测)。 arc4random()not perfect 的设计考虑了安全性。

    我认为 Apple 会因此将人们推向 arc4random()。所以,回答你的问题:如果你正在生成随机数来模拟某些东西,drand48 应该没问题,但是如果你正在生成随机数来保护某些东西,那么使用arc4random()(或者更安全的东西,比如SecRandomCopyBytes() )。


    来自 ONLamp 的Secure Programming Techniques

    drand48( )、lrand48( ) 和 mrand48( )

    drand48( ) 函数是构成 System V 随机数生成器的众多函数之一。根据 Solaris 文档,该算法使用“著名的线性同余算法和 48 位整数算法”。函数 drand48( ) 返回大于等于 0.0 且小于 1.0 的双精度数,而 lrand48( ) 和 mrand48( ) 函数返回指定整数范围内的随机数。与 random( ) 一样,这些函数为模拟和游戏提供了极好的随机数,但不应用于与安全相关的应用程序,例如选择加密密钥或模拟一次性密码;线性同余算法太容易破解了。

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 2013-07-10
      • 1970-01-01
      • 2023-02-14
      • 2023-01-16
      • 1970-01-01
      • 1970-01-01
      • 2020-04-26
      相关资源
      最近更新 更多