comparison between rand() and arc4random()
2012-03-13 16:07
393 查看
今天在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); |
相关文章推荐
- [Error] ISO C++ forbids comparison between pointer and integer [-fpermiss
- Difference Between == and === : A Simple Comparison
- Ordered comparison between pointer and zero ('const char *' and 'int')
- A Comparison between Focus-Group and In-Depth Interview
- CSharp - Comparison between IComparer and IComparable
- A warning - comparison between signed and unsigned integer expressions [-Wsign-compare]的解决方法
- C warning“comparison between pointer and integer [enabled by default]”
- Comparison between the simplex algorithm and interior point method
- A Technical Comparison between PDF and DJVU
- A Technical Comparison between PDF and DJVU
- 文献笔记:《Fitting a 3D Morphable Model to Edges: A Comparison Between Hard and Soft Correspondences》读后感~
- Comparison Between NetCDF and HDF5
- A High Level Comparison Between Oracle and SQL Server - Part II
- comparison between distinct pointer types 'QPushButton*' and 'QAbstractButton*' lacks a cast
- JNI - Divide by Zero. A comparison between Java and C(1)
- CSharp - Comparison between IComparer and IComparable
- Comparison Modeling between Excel and PowerPivot
- A Comparison Between Haar Wavelet Transform and Fast Fourier Transform in Analyzing Financial Time S
- [dynamic FL]part 6:comparison between Dynamic and Static
- Comparison between Hive, Impala, Drill and SparkSQL