c语言随机变量seed,C语言之实现随机数产生算法

随机数,也就是在不同的时刻产生不同的数值。在UNIX操作系统和window的操作系统上,我们知道有一个函数rand,它就是用来产生随机数的函数API接口,那么它的原理如何实现?

如果约定a1=f(seed),an+1=f(an),那么可以得到一个序列a1,a2,a3..an,那么要制作一个伪随机函数rand,只需要让它每调用一次就返回序列的下一个元素就行。其实就是相当于第1次调用rand返回a1,第2次返回a2,…,第n次返回an,这样每次返回的数值都不一样,也就是相当于随机数了。但是其实不是真正的随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。

在当前的计算机领域,许许多多的随机数算法正是基于这样的原理产生,一般情况下我们在平时使用rand函数的时候,需要种钟子,也就是种随机数种子,确保每一次产生的数值不一样。这时候我们需要一个srand()的函数,然后在一定的时间里time()函数产生不同的序列。

一般在写的时候是这样:srand(time(NULL)) ;这样就相当于种种子。接下来我们来看一下具体的代码:

#include

#include

static unsigned int randseed;

/* 实现伪随机数的支持 */

unsigned int Curl_rand(void)

{

unsigned int r;

/* 返回一个无符号32位整型的伪随机数. */

r = randseed = randseed * 1103515245 + 12345;

return (r << 16) | ((r >> 16) & 0xFFFF);

}

void Curl_srand(void)

{

/* 产生随机的伪随机数序列。 */

randseed = (unsigned int) time(NULL);

Curl_rand();

Curl_rand();

Curl_rand();

}

int main(void)

{

srand();

unsigned int i ;

int j = 10;

printf("产生10个随机数:\n");

while(j != 0){

i = Curl_rand() % 100 ;

printf("i:%d\n",i);

j-- ;

}

return 0 ;

}执行结果:

2257d44835f6912d4f24f22b161d4b70.png

如果不用这样的算法,我们调用系统实现的接口是这样:

#include

#include

#include

int main(void)

{

//种种子

srand(time(NULL));

int i ;

int j ;

for(i = 0 ; i < 10 ; i ++)

{

//产生10个100以内的随机数

j = rand()%100 ;

printf("j:%d\n",j);

}

return 0 ;

}运行结果:

459e19b6adccdf9d1dd9cc5bc7750dac.png

本文同步分享在 博客“Engineer-Bruce_Yang”(CSDN)。

如有侵权,请联系 support@oschina.cn 删除。

本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值