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

简介:

来源: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()调用的时候不会出现重复的随机值。



本文转自夏雪冬日博客园博客,原文链接:http://www.cnblogs.com/heyonggang/p/3472779.html,如需转载请自行联系原作者

目录
相关文章
执行apt-get install xxx 遇到无法定位软件包解决方法
执行apt-get install xxx 遇到无法定位软件包解决方法
4639 0
执行apt-get install xxx 遇到无法定位软件包解决方法
|
11月前
|
机器学习/深度学习 人工智能 云计算
与阿里合作项目荣获2024年度教育部产学合作协同育人项目优秀案例
该项目强调利用阿里云计算有限公司的低代码开发平台和算力资源,开发创新性的教学案例,以支持机器学习和深度学习等前沿技术课程的教学和实验。项目部分成果纳入了即将出版的《深度学习实战案例》教材中,该教材由人民邮电出版社出版。
556 10
|
6月前
|
存储 安全 Java
2025 年 Java 秋招面试必看的 Java 并发编程面试题汇总
文章摘要: 本文系统梳理Java并发编程核心知识点,助力2025年秋招面试。内容涵盖:1)基础概念,包括线程/进程区别、创建线程的3种方式(Thread/Runnable/Callable)、6种线程状态及转换;2)关键机制,对比sleep()与wait()的锁行为差异,解释start()而非run()启动线程的原因;3)工具类与典型应用场景。通过技术原理与代码示例结合的方式,帮助开发者深入理解并发模型、线程同步等核心问题,为高并发系统设计打下坚实基础。(150字)
379 0
|
SQL 存储 数据可视化
Ganos H3地理网格能力解析与最佳实践
Ganos H3地理网格是一种基于六边形结构的高效地理空间数据处理技术,适用于物流、社交网络、数据分析及应急响应等多种场景。Ganos H3利用独特的六边形网格体系实现更均匀的数据分布和固定邻居关系,优化了空间数据分析、路径规划等功能。Ganos地理网格引擎支持GeoSOT和H3两种网格,具备丰富的打码方式、高性能查询及聚合分析能力,并能与几何和栅格数据融合,大幅提升了数据处理效率和存储成本效益。借助Ganos H3,企业和开发者可以更好地管理和利用地理空间数据,提高位置相关决策的准确性和效率。
548 0
|
开发工具 iOS开发 git
ios 开发环境常见问题合集
ios 开发环境常见问题合集
499 1
ly~
|
数据可视化 BI API
除了 OpenGL,还有哪些常用的图形库可以在 C 语言中使用?
除了OpenGL,C语言中还有多个常用的图形库:SDL,适合初学者,用于2D游戏和多媒体应用;Allegro,高性能,支持2D/3D图形,广泛应用于游戏开发;Cairo,矢量图形库,支持高质量图形输出,适用于数据可视化;SFML,提供简单接口,用于2D/3D游戏及多媒体应用;GTK+,开源窗口工具包,用于创建图形用户界面。这些库各有特色,适用于不同的开发需求。
ly~
2975 4
|
API Nacos 数据库
Nacos配置问题之启动项目报错如何解决
Nacos是一个开源的、易于部署的动态服务发现、配置管理和服务管理平台,旨在帮助微服务架构下的应用进行快速配置更新和服务治理;在实际运用中,用户可能会遇到各种报错,本合集将常见的Nacos报错问题进行归纳和解答,以便使用者能够快速定位和解决这些问题。
6065 106
|
关系型数据库 MySQL 数据库连接
成功解决「MySQL问题1」启动mysql时:发生系统错误5拒绝访问
这篇文章介绍了如何解决启动MySQL服务时遇到的系统错误5(拒绝访问),通过管理员权限启动命令窗口并使用"net start mysql"和"net stop mysql"命令来控制服务。
|
运维 Kubernetes Shell
Kubernetes —集群故障排查(Kubectl 、telepresence)
Kubernetes —集群故障排查(Kubectl 、telepresence)
319 2
|
供应链 数据挖掘 API
淘宝API接口系列:数据分析丨Erp上货丨维权控价丨商品搬家丨店铺订单管理
淘宝API接口系列在多个方面为电商业务提供了强大的支持,包括数据分析、ERP上货、维权控价、商品搬家以及店铺订单管理。下面将针对这些方面逐一进行说明。