oc 中随机数的用法(arc4random( ) 、random( )、CCRANDOM_0_1( )

简介: 来源:http://www.cnblogs.com/jay-dong/archive/2012/07/23/2604916.html 1)、arc4random() 比较精确不需要生成随即种子        使用方法 :                  通过arc4random()...

 

来源:http://www.cnblogs.com/jay-dong/archive/2012/07/23/2604916.html

1)、arc4random() 比较精确不需要生成随即种子

       使用方法 :

                 通过arc4random() 获取0到x-1之间的整数的代码如下:

                 int value = arc4random() % x; 


                 获取1到x之间的整数的代码如下:

                 int value = (arc4random() % x) + 1; 

 

       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); //初始化时,设置下种子就好了。

 

 

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

 

 

-(float)randomFloatBetween:(float)num1 andLargerFloat:(float)num2
{
   
int startVal = num1*10000;
   
int endVal = num2*10000;

   
int randomValue = startVal +(arc4random()%(endVal - startVal));
   
float a = randomValue;

   
return(a /10000.0);
}



在一些产品的源代码中,经常会发现有这样的语句,

srand(unsigned(time(NULL)));

为什么要这样做呢,其实很简单。

1.  time()函数表示返回1970-1-1 00:00:00 到当前时间的秒数,而time(NULL)表示获取一个时间,准确的说,获取一个指针的地址。

2.  srand()函数是产生随机数种子的。在产生随机数 rand()被调用的时候,他会查看:如果用户之前调用过 srand(seed)的话,他会重新调用一遍 srand(seed)以产生随机数种子;如果发现没有调用过 srand(seed)的话,会自动调用 srand(1)一次。所以,如果希望rand()每次调用产生的值都不一样,就需要每次调用srand(seed)一次,而且seed不能相同。

综合上述两点,那就很明了了。

srand(unsigned(time(NULL)))表示产生随机数种子以保证rand()调用的时候不会出现重复的随机值。

img_e00999465d1c2c1b02df587a3ec9c13d.jpg
微信公众号: 猿人谷
如果您认为阅读这篇博客让您有些收获,不妨点击一下右下角的【推荐】
如果您希望与我交流互动,欢迎关注微信公众号
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。

目录
相关文章
|
1月前
|
算法 C#
54.c#:random类
54.c#:random类
14 1
|
25天前
|
算法 安全 大数据
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析(二)
【C/C++ 随机函数行为】深入探索C++中的随机数:std::random_device与rand的行为分析
46 0
|
4月前
|
Java API
Java的Math.random获取区间随机数
Java的Math.random获取区间随机数
|
4月前
Math.random()随机函数的一些常用封装方法
Math.random()随机函数的一些常用封装方法
|
5月前
|
安全 Java 数据安全/隐私保护
java random随机数的用法
java random随机数的用法
|
算法 Java
Java 随机数产生 Random和Math 解决
Java 随机数产生 Random和Math 解决
105 0
Java 随机数产生 Random和Math 解决
|
数据安全/隐私保护
Random的nextInt()用法
Random的nextInt()用法
156 0
|
编译器 C语言 C++
C++中rand随机数的用法
C++标准函数库提供一随机数生成器rand,返回0-RAND_MAX之间均匀分布的伪随机整数。 RAND_MAX必须至少为32767。rand()函数不接受参数,默认以1为种子(即起始值)。 随机数生成器总是以相同的种子开始,所以形成的伪随机数列也相同,失去了随机意义。(但这样便于程序调试)
Math和Random类常用方法
Math和Random类常用方法
77 0
|
分布式计算 Spark
随机数生成 Random data generation
Spark ml 随机数生成器 RandomRDDs 是一个工具集,用来生成含有随机数的RDD,可以按各种给定的分布模式生成数据集, Random RDDs包下现支持正态分布、泊松分布和均匀分布三种分布方式。 RandomRDDs提供随机double RDDS或vector RDDS。
101 0