comparison between rand() and arc4random()

2024-01-15 07:58
文章标签 rand comparison arc4random

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

 

今天在iPhone开发过程中,遇到一个需要生成随机数的问题。很快rand()和arc4random()都进入了考虑范围,但选择的时候感觉有点为难。之前的时候可能没有思索就随便挑一个用了,不过这次良心发现不能太随便了。rand() 和arc4random()到底应该如何取舍呢?调查了下,发现下文很好地解答了这个问题。

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

srandom(time(NULL)); 


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


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

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

int value = arc4random() % x; 



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

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


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

最后如果想生成一个浮点数,可以在项目中定义如下宏:

#define ARC4RANDOM_MAX      0x100000000 

然后就可以使用arc4random() 来获取0到100之间浮点数了(精度是rand()的两倍),代码如下:

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

这篇关于comparison between rand() and arc4random()的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Face Recognition简记1-A Performance Comparison of Loss Functions for Deep Face Recognition

创新点 1.各种loss的比较 总结 很久没见到这么专业的比较了,好高兴。 好像印证了一句话,没有免费的午餐。。。。 ArcFace 和 Angular Margin Softmax是性能比较突出的

srand()和rand()

srand()是随机数种子,s表示seed,种子的意思。 rand()可以产生0到RAND_MAX(32767)之间的随机数,用rand()%x可以得到0到x之间的随机数。 srand()和rand()都需要用到stdlib.h。 srand()的种子主要有两种,srand(1)和srand((unsigned)time(NULL)),前者生成的随机数每次都是相等的,后者则是根据现在

C语言之随机数函数( rand() )的使用方法

https://blog.csdn.net/knigh_yun/article/details/80082944

Excel ——3个实用的随机函数(RAND 、RANDBETWEEN、RANDARRAY)

1、RAND 函数 RAND 函数是一个没有参数的函数:RAND () 返回一个大于等于 0,小于 1 的随机实数。 选中任一单元格,在编辑栏输入公式: 如果要生成 a 与 b 之间的随机数,就用: =RAND()*(b-a)+a 比如要生成-5 到 8 范围的随机数,就把 a=-5,b=8 代入公式中,写成:=RAND()*13-5 2、RANDBETWEEN 函数 再

Comparison method violates its general contract! 神奇的报错

发生情况 定位到问题代码如下(脱敏处理过后),意思是集合排序,如果第一个元素大于第二个元素,比较结果返回1,否则返回-1,这里粗略的认为小于和等于是一样的结果 List<Integer> list = Arrays.asList(2213, 2214, 2235, 2211, 228, 2233, 2215, 2229, 2212, 0, 2245, 2220, 225,2237, 2241,

Codesys 编程实现随机数字+仿照rand()原理+代码下载

目录 一、C语言中rand()随机数的演示及问题 二、同样的原理,在Codesys中实现随机数 三、codesys在线仿真验证功能 四、代码下载 一、C语言中rand()随机数的演示及问题 (1)只用rand()函数的问题 //只有rand,没有srand生成随机种子#include<stdio.h>#include<unistd.h>int main(){int i=0;f

MySQL巧用RAND()提取随机行

打卡(2020-05-05) 巧用RAND()提取随机行 // 随机排序 然后取出6条数据select * from category order by rand() limit 6; 寄语:望着青灯古佛的夜晚,在想你面庞的夜晚!

lightoj 1428 Melody Comparison 后缀数组

题意:给定一个字符串A和字符串B,求A的不包含B的不同子串个数。 思路:首先把B串接到A串后面中间用一个A、B中均未出现的字符隔开,构成字符串s。求出每个字符对应的height[ i ]、sa[ i ]、rank[ i 。我们开一个rmax数组,rmax[ i ]存的是从A串的第i个字符向右能不形成包含B串的串的最长长度,那么我们必须先知道A串哪些位置 开始能形成B串。假设A串的长度为l

rand,floor,ceiling,cast,newid,round随机数

一、 rand():生成随机数,像0.36361513486289558 floor(): 返回小于或等于所给数字表达式的最大数 ceiling():返回大于或等于所给数字表达式的最小数 cast() :生成整数 注:(FLOOR 和 CEILING 返回值的数据类型都与输入的数字表达式的数据类型相同。 ) 例子: 1、对于数字表达式 12.9273,CEILING 将返回 13,F

LinuxC语言中的数组和rand函数和宏定义和全排列

文章目录 一、数组也是一种复合数据类型1.数组的定义2.数组中的元素通过下标(或者叫索引,Index) 来访问。3.C语言中后缀运算符的优先级高于前缀运算符4.数组下标也可以是表达式,但表达式的值必须是整型的5.数组的初始化6.定义和访问数组——遍历的使用7.数组与结构体的显著区别 二、数组的应用例子:统计随机数1.rand函数介绍(i)预处理器的作用:(ii)那么用 #define 定义的