随机函数之 rand() 与 arc4random() 对比

转载 2012年03月22日 20:31:49
今天在iPhone开发过程中,遇到一个需要生成随机数的问题。很快rand()和arc4random()都进入了考虑范围,但选择的时候感觉有点为难。之前的时候可能没有思索就随便挑一个用了,不过这次良心发现不能太随便了。rand() 和arc4random()到底应该如何取舍呢?调查了下,发现下文很好地解答了这个问题。
在iPhone中有几个内嵌的随机数发生器,很多人的第一反应可能就是在调用如下函数后使用rand():
  1. srandom(time(NULL));
复制代码

但是……,rand()实际并不是一个真正的伪随机数发生器,random()会相对好点,但也不算理想。幸运的是iPhone上还有其他的选择。个人来说我首选arc4random() ,原因就是它是一个真正的伪随机算法,而且范围是rand()的两倍。

在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296),从而有更好的精度。此外,使用arc4random()还不需要生成随机种子,因为第一次调用的时候就会自动生成。
通过arc4random() 获取0到x-1之间的整数的代码如下:
  1. int value = arc4random() % x;
复制代码

获取1到x之间的整数的代码如下: 
  1. int value = (arc4random() % x) + 1;
复制代码

其中,根据预算优先级括号实际是不需要的,不过我还是对括号格外小心。 

最后如果想生成一个浮点数,可以在项目中定义如下宏:
  1. #define ARC4RANDOM_MAX      0x100000000
复制代码

然后就可以使用arc4random() 来获取0到100之间浮点数了(精度是rand()的两倍),代码如下:
  1. double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);   
复制代码

objective-c 中随机数的用法 (rand()、arc4random() 、random()、CCRANDOM_0_1() )

1、随机数的使用    1)、arc4random() 比较精确不需要生成随即种子       使用方法 :                 通过arc4random() 获取0到x-1之间的...
  • hghjgbjhgadja
  • hghjgbjhgadja
  • 2016年02月02日 14:43
  • 506

iOS 中生成随机数的4种方法(rand、random、arc4random、arc4random_uniform)

转自 http://www.cnblogs.com/zeejun/archive/2012/07/22/2603329.html iOS 有如下三种随机数方法: 1.    srand((unsi...
  • chy555chy
  • chy555chy
  • 2016年06月23日 00:26
  • 2940

随机函数rand()[c++]

  一、C++中不能使用random()函数     random函数不是ANSI C标准,不能在gcc,vc等编译器下编译通过。但在C语言中int random(num)可以这样使用,它返回的是0至...
  • woxueliuyun
  • woxueliuyun
  • 2008年02月29日 11:28
  • 38325

Swift - 使用arc4random()、arc4random_uniform()取得随机数

arc4random()这个全局函数会生成9位数的随机整数 1,下面是使用arc4random函数求一个1~100的随机数(包括1和100) 1 ...
  • sd19871122
  • sd19871122
  • 2016年05月02日 15:56
  • 796

产生随机数————srand函数与rand函数的使用

rand()的使用方法,srand(value)的使用方法,rand()与srand(value)的关系,rand()产生随机数的原理与细节分析...
  • zl_130
  • zl_130
  • 2016年08月22日 18:02
  • 1719

如何用随机函数rand5( )来构造随机函数rand7( )_Intel_20160922

题目描述 假如有一个函数 rand5( ) 能等概率生成1-5之间的整数,如何利用 rand5( ) 来实现rand7( )? rand7函数的要求是能够等概率生成1-7之间的整数。题目分析 这...
  • yanxiyu_2005
  • yanxiyu_2005
  • 2016年09月22日 23:13
  • 147

解决Mysql坑爹的随机函数rand()

原始的sql语句是: select content poetryDesc,author poetryAnthor,l.backImg labelImg,p.id poetryId,p.fullC...
  • xb12369
  • xb12369
  • 2015年01月16日 12:37
  • 1655

Swift中使用随机数

在Swift中使用随机数 在我们的开发过程中,有时需要产生一些随机数.而Swift中并没有像JAVA中一样提供一个专门的Random类来集中的生成随机数. 在Swift中,提供了几个全局的函数来生...
  • u014455765
  • u014455765
  • 2015年12月28日 16:06
  • 1677

MySQL的随机数函数rand()的使用技巧

php中随机函数rand或mt_rand,可以传入一个参数,产生0到参数之间的随机整数,也可以传入两个参数,产生这两个参数之间的随机整数。 mysql中随机数函数rand不能传参,产生的0到1之间的...
  • baikeliang
  • baikeliang
  • 2015年09月23日 16:19
  • 1659

rand() 与 arc4random()的选用

在iPhone中有几个内嵌的随机数发生器,很多人的第一反应可能就是在调用如下函数后使用rand(): srandom(time(NULL));  但是……,rand()实际并不是一个真正的...
  • qq55008307
  • qq55008307
  • 2012年10月22日 16:25
  • 282
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:随机函数之 rand() 与 arc4random() 对比
举报原因:
原因补充:

(最多只允许输入30个字)