C/C++中生成随机序列——随机函数的选择和自我实现

一、缘由

最近需要将windows下的项目移植到linux下,但因为项目使用到随机函数,导致最后两边的结果有些微差异,因此需要将两边随机函数统一来保证运行结果每一步能对应上。
大家常用的随机函数有srand()/rand();

二、srand()/rand()

1.项目中采用的随机数生成函数是 rand()。
rand()返回一随机,数值的范围在0至RAND_MAX 间。

它的内部实现是用线性同余法做的,产生的新随机数作为下一次随机数的种子,它不是真的随机数,因其周期特别长,故在一定的范围里可看成是随机的。
线性同余法的原理:
X_{n+1} = ( a * X_n + c ) mod m

windows 下RAND_MAX 为32767(16位)。
linux下为2147483647(32位)
如果不用srand()指定随机函数,指定默认情况下种子为1。

2.其用法为:
void srand(unsigned int seed);
int rand();

#include <stdlib.h>//rand()头文件
#include <time.h> //为了
srand((
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值