随机数

在iPhone中有几个内嵌的随机数发生器,很多人的第一反应可能就是在调用如下函数后使用rand():

 

srandom(time(NULL)); 

 

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

 

在iPhone中,RAND_MAX是0x7fffffff (2147483647),而arc4random()返回的最大值则是 0x100000000 (4294967296),从而有更好的精度。此外,使用arc4random()还不需要生成随机种子,因为第一次调用的时候就会自动生成。

 

 

 

1)、通过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()的两倍),代码如下:

 

double val = floorf(((double)arc4random() / ARC4RANDOM_MAX) * 100.0f);  

 

源文档 <http://bj007.blog.51cto.com/1701577/544006>

 

 

 

 

 

 

2)、CCRANDOM_0_1() cocos2d中使用 ,范围是[0,1]

       使用方法:

                 float random = CCRANDOM_0_1() * 5; //[0,5]   CCRANDOM_0_1() 取值范围是[0,1]

 

  

3)、random() 需要初始化时设置种子

      使用方法:

                srandom((unsigned int)time(time_t *)NULL); //初始化时,设置下种子就好了。

 

源文档 <http://www.cnblogs.com/xuling/archive/2012/02/28/2370692.html>

 

 例:

int minDuration =2.0;
int maxDuration =4.0;
int rangeDuration = maxDuration - minDuration;
int actualDuration = (arc4random() % rangeDuration) + minDuration;
posted @ 2012-06-25 10:02  ArtSun  阅读(165)  评论(0)    收藏  举报