iPhone开发随想:rand()还是arc4random()

2024-05-04 09:58

本文主要是介绍iPhone开发随想:rand()还是arc4random(),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://bj007.blog.51cto.com/1701577/544006

    今天在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);    


 

原文链接:http://iphonedevelopment.blogspot.com/2008/10/random-thoughts-rand-vs-arc4random.html

这篇关于iPhone开发随想:rand()还是arc4random()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/958931

相关文章

Spring Boot构建应用开发规范

1.规范的意义和作用 •编码规范可以最大限度的提高团队开发的合作效率 •编码规范可以尽可能的减少一个软件的维护成本 , 并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护 •编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码 •规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维 2.代码仓库规范 2.1公共组件 •公共组件通常指

研究实验1_搭建一个精简的C语言开发环境(包含部分经典的前言)

综合研究:      在这部分内容中,将启示我们如何进行独立研究和深度思考(一定要注意这一点,相应的调整自己的学习思想)。同时使我们:          (1)认识到汇编语言对于深入理解其他领域知识的重要性。          (2)对前面所学习的汇编语言知识进行融会。          (3)对用研究的方法进行学习进行体验。  研究实验1_搭建一个精简的C语言开发环境:  在运行过

机器人系统ros2-开发学习实践12-给机器人模型添加物理和碰撞属性

在本教程中,我们将了解如何向 URDF 模型添加一些基本物理属性以及如何指定其碰撞属性。 碰撞 到目前为止,我们仅使用单个子元素 指定了链接,visual它定义了(毫不奇怪)机器人的外观。然而,为了使碰撞检测起作用或模拟机器人,我们collision还需要定义一个元素。 下面是具有碰撞和物理属性的新 urdf 。 <?xml version="1.0"?><robot name="phys

OpenHarmony 3GPP协议开发深度剖析——一文读懂RIL

市面上关于终端(手机)操作系统在 3GPP 协议开发的内容太少了,即使 Android 相关的学习文档都很少,Android 协议开发书籍我是没有见过的。可能是市场需求的缘故吧,现在市场上还是前后端软件开发从业人员最多,包括我自己。 基于我曾经也在某手机协议开发团队干过一段时间,协议的 AP 侧和 CP 侧开发都整过,于是想尝试下基于 OpenAtom OpenHarmony(以下简称“Open

python开发的学习路线

I. 基础知识学习 A. Python基础语法         变量和数据类型 学习如何定义变量,理解并使用不同的数据类型(整数、浮点数、字符串、布尔值等)。 掌握数字类型的转换和操作。 熟悉字符串的基本操作,如拼接、切片、替换和查找。                                                                控制流程 掌握条件语句

Linux内核基础 -- I2C 控制器驱动开发指南

Linux Kernel I2C 控制器驱动开发指南 本文档旨在指导开发者如何在 Linux 内核中编写和注册 I2C 控制器驱动。 1. I2C 控制器驱动代码位置 在 Linux 内核中,I2C 控制器的驱动代码通常位于以下路径: drivers/i2c/busses/ 在这个目录中,每个 I2C 控制器的驱动通常都有一个独立的 C 文件。例如,i2c-bcm2835.c、i2c-

数据分析实例——搭建电商的指标体系||对应功能开发需要接入的电商API接口说明

前言:         在日常工作中,数据分析中常常涉及搭建指标体系,搭建电商需要接入的电商API接口本文主要以电商为案例,来讲讲如何搭建指标体系。 指标体系的定义:  指标体系是由一系列指标组成的,这些指标是基于不同的考量角度和不同的业务维度来设定的,为实现同一个目标。 指标主要由衡量维度、汇总方式、量度单位三个要素构成 搭建指标体系,就是拆解并获得这些

鸿蒙HarmonyOS开发:@Builder装饰器,自定义构建函数

文章目录 一、自定义构建函数1、自定义组件内自定义构建函数2、全局自定义构建函数3、参数传递规则 二、示例演示1、Image组件2、layoutWeight属性3、定义模型类4、代码5、效果 一、自定义构建函数 ArkUI还提供了一种更轻量的UI元素复用机制@Builder,@Builder所装饰的函数遵循build()函数语法规则,开发者可以将重复使用的UI元素抽象成一个

介绍一下3D游戏开发的简单常识,以及最终幻想13游戏流程为什么会过于线性的原因。

介绍一下3D游戏开发的简单常识,以及最终幻想13游戏流程为什么会过于线性的原因。 (1) 回复 1楼2012-01-25 14:10 举报 | keyblade2 坐等B青现身给LZ答疑解惑 回复 2楼2012-01-25 14:17 举报 | 吧友222.42.88.* 一款现代

ssm132医院住院综合服务管理系统设计与开发+vue

医院住院综合服务管理系统的设计与实现 摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对医院住院信息管理混乱,出错率高,信息安全性差,劳动强度大,费时费力等问题,采用医院住院综合服务管理系统可以有效管理,使信息管理能够更加科学和规范。 医院住院综合服务管理系统在Eclipse环境