下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
论坛 >编程语言 >Swift 中随机数的使用

Swift 中随机数的使用

希尔瓦娜斯发布于 2017-08-21 09:21查看:1446回复:1

        在我们开发的过程中,时不时地需要产生一些随机数。这里我们总结一下Swift中常用的一些随机数生成函数。这里我们将在Playground中来做些示例演示。

        整型随机数

        如果我们想要一个整型的随机数,则可以考虑用arc4random系列函数。我们可以通过man arc4random命令来看一下这个函数的定义:

1503278137239164.jpg

        arc4random使用了arc4密码加密的key stream生成器(请脑补),产生一个[0, 2^32)区间的随机数(注意是左闭右开区间)。这个函数的返回类型是UInt32。如下所示:

1503278165322631.jpg

        如果我们想生成一个指定范围内的整型随机数,则可以使用arc4random() % upper_bound的方式,其中upper_bound指定的是上边界,如下处理:

1503278188590018.jpg

        不过使用这种方法,在upper_bound不是2的幂次方时,会产生一个所谓Modulo bias(模偏差)的问题。

        我们在控制台中通过man arc4random命令,可以查看arc4random的文档,有这么一条:

1503278217623890.jpg

        因此可以使用arc4random_uniform,它接受一个UInt32类型的参数,指定随机数区间的上边界upper_bound,该函数生成的随机数范围是[0, upper_bound),如下所示:

1503278241625563.jpg

        而如果想指定区间的最小值(如随机数区间在[5, 100)),则可以如下处理:

1503278313239619.jpg

        当然,在Swift中也可以使用传统的C函数rand与random。不过这两个函数有如下几个缺点:

            这两个函数都需要初始种子,通常是以当前时间来确定。

            这两个函数的上限在RAND_MAX=0X7fffffff(2147483647),是arc4random的一半。

            rand函数以有规律的低位循环方式实现,更容易预测

        我们以rand为例,看看其使用:

1503278357447929.jpg

        64位整型随机数

        在大部分应用中,上面讲到的几个函数已经足够满足我们获取整型随机数的需求了。不过我们看看它们的函数声明,可以发现这些函数主要是针对32位整型来操作的。如果我们需要生成一个64位的整型随机数呢?毕竟现在的新机器都是支持64位的了。

        目前貌似没有现成的函数来生成64位的随机数,不过jstn在stackoverflow上为我们分享了他的方法。我们一起来看看。

        他首先定义了一个泛型函数,如下所示:

1503278439460310.jpg

这个函数中使用了arc4random_buf来生成随机数。让我们通过man arc4random_buf来看看这个函数的定义:

1503278469880591.jpg


收藏(0)0
查看评分情况

全部评分

此主贴暂时没有点赞评分

总计:0

回复分享

版主推荐

    共有1条评论

    • 课课家运营团队
    • 酸酸~甜甜
    • Mr ken
    • YUI
    • cappuccino
    • mr jack
    • IT宅男
    • Mright
    • 课课家技术团队1
    • 选择版块:

    • 标题:

    • 内容

    • 验证码:

    • 标题:

    • 内容

    • 选择版块:

    移动帖子x

    移动到: