随机函数 rand,srand,random,srandom 的区别与使用
来源:互联网 发布:手机电话轰炸机软件 编辑:程序博客网 时间:2024/05/28 23:21
origin: http://blog.csdn.net/langeldep/article/details/7192906
由于使用非线程安全的rand, 造成系统某些内存被无故修改,真是坑人呀
函数定义:
int rand(void); 返回 0 ------- RAND_MAX 之间的一个 int 类型整数,该函数为非线程安全函数。并且生成随机数的性能不是很好,已经不推荐使用。
void srand(unsigned int seed); 设置种子值,一般与“当前时间 + 进程ID”作为种子,如果没用调用该函数,则通过rand返回的默认种子值为1。
实现类似如下 :
- <span style="font-size:16px;">
- static unsigned long next = 1;
- void my_srand(unsigned seed) {
- next = seed;
- }
- /* RAND_MAX assumed to be 32767 */
- int my_rand(void) {
- next = next * 1103515245 + 12345;
- return((unsigned)(next/65536) % 32768);
- }</span>
官方推荐使用的函数为 :
long int random(void);
返回 0 ------- RAND_MAX 之间的一个 long 类型整数,该函数会产生一个非常大的随机值,最大为 16*((2**31)-1)。
random 函数使用非线性反馈随机数发生器生成默认大小为31个长整数表所返回的连续伪随机数。
void srandom(unsigned int seed);
设置种子值,一般与“当前时间 + 进程ID”作为种子,如果没用调用该函数,则通过random返回的默认种子值为1。
使用方法 :
假如你想产生 1 ------10 之间的一个随机数, 你应该像下面这样编码
j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));
而不是下面这样的代码j = 1 + (rand() % 10);
结论:
如果你使用 srandom 种植种子, 则你应该使用 random 返回随机数, 如果你使用 srand 种植种子, 则你应该使用rand返回随机数。
不过srand和rand官方已经不推荐使用。原因是产生随机数的性能不是很好, 另外是随机数的随机性没有random好, 再者就是不是线程安全。
- 随机函数 rand,srand,random,srandom 的区别与使用
- 随机函数 rand,srand,random,srandom 的区别与使用
- 随机函数 rand,srand,random,srandom 的区别与使用
- 随机函数 rand,srand,random,srandom 的区别与使用
- 二十四 随机函数 rand,srand,random,srandom 的区别与使用
- rand,srand,random,srandom
- C编程--random,rand,srand,srandom函数
- <stdlib.h>中的随机数产生函数rand,random,srand,srandom的一些知识
- rand()与srand()函数的使用
- 关于随机函数srand()与rand()的实验
- php的tips(生成随机函数rand与srand)
- rand()/srand()随机函数
- 随机函数 rand&srand
- 随机函数的rand、srand用法
- rand和srand随机函数的用法
- srand函数与rand函数的使用方法及区别
- rand()函数与srand()函数的对比与使用
- 随机函数SRAND和RAND
- IOS 证书申请
- 删除主串中模式串出现的字符
- hdu4758(ac自动机,状态压缩dp)
- Qt之模型/视图(自定义进度条)
- socket编程
- 随机函数 rand,srand,random,srandom 的区别与使用
- 从零开始_学_数据结构(零)——数据结构总述
- Android 进程常驻(4)----native保活5.0以上方案推演过程以及代码详述
- CefSharp之三-如何获取request和response
- HDU 1874 图论模板复习
- Android 软键盘详解
- Android View绘图机制
- 关于java 多线程编程的同步问题
- 使用screenrecord对APP性能测试中的响应时间指标进行收集