美文网首页
iOS开发基础性知识(四)----随机数生成的机制

iOS开发基础性知识(四)----随机数生成的机制

作者: NBeanN | 来源:发表于2017-05-02 16:25 被阅读55次

    一、在C中提供了rand()、srand()、random()、arc4random()几个函数。

    1.使用 arc4random 生成随机数

    1.1 获取一个随机整数范围在:[0,100)包括0,不包括100,int x = arc4random() % 100;

    1.2 获取一个随机数范围在:[100,200],包括100,包括200,int y =100 +  (arc4random() % 101);

    1.3抽取方法

    获取一个随机整数,范围在[from,to],包括from,包括to

    -(int)getRandomNumber:(int)from to:(int)to

    {

             return (int)(from + (arc4random() % (to – from + 1)));

    }

    2.使用 rand() 生成随机数

    2.1 注意:在标准的C库中函数rand()可以生成0~RAND_MAX之间的一个随机数,其中RAND_MAX 是stdlib.h 中定义的一个整数,它与系统有关。

    rand()函数没有输入参数,直接通过表达式rand()来引用;

    printf("Random numbers are: %i %i\n",rand(),rand());

    2.2 伪随机数:

    因为rand()函数是按指定的顺序来产生整数,因此每次执行上面的语句都打印相同的两个值,所以说C语言的随机并不是真正意义上的随机,有时候也叫伪随机数。

    为了使程序在每次执行时都能生成一个新序列的随机值,我们通常通过为随机数生成器提供一粒新的随机种子。函数 srand()(来自stdlib.h)可以为随机数生成器播散种子。只要种子不同rand()函数就会产生不同的随机数序列。

    srand()称为随机数生成器的初始化器。

    用rand()随机生成在[x,y]内的整数/*k即为所求范围内随机生成的数,rand()%a的结果最大为a-1*/

    int k= x+rand()%(y-x+1)

    3.比较

    rand()和random()实际并不是一个真正的伪随机数发生器,在使用之前需要先初始化随机种子,否则每次生成的随机数一样。

    arc4random() 是一个真正的伪随机算法,不需要生成随机种子,因为第一次调用的时候就会自动生成。而且范围是rand()的两倍。在iPhone中,RAND_MAX是 0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296)。

    精确度比较:arc4random() > random() > rand()。

    //  1. rand(),不加这句每次产生的随机数不变

    srand((unsigned)time(0));

    int i = rand() % 100;

    // 2. random()

    srandom(time(0));

    int i = random() % 100;

    // 3. arc4random()

    int i = arc4random() % 100 ;

    站在巨人的肩膀上才有这些总结

    菜鸟走向大牛,大家共同前进,如果觉得不错,请给个赞/关注。

    一起交流学习,有问题随时欢迎联系,邮箱:383708669@qq.com

    相关文章

      网友评论

          本文标题:iOS开发基础性知识(四)----随机数生成的机制

          本文链接:https://www.haomeiwen.com/subject/hovctxtx.html