码迷,mamicode.com
首页 > 其他好文 > 详细

探秘rand神秘面纱

时间:2014-07-25 11:19:11      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:c   c语言   rand 随机数 标准库   

这位名字很长同学的帖子rand产生出的一个随机函数是递增的里看到对rand、种子值不解,以及老师说"因为相邻两轮循环的时间小于1秒,所以种子值就是相同的,于是随机数就是相同的",勾起了我对rand的兴趣。恰好前几天看the c programming language看到一些实现:

unsigned long int next = 1;
//rand函数,返回值在0~32767之间的伪随机数。
int rand(void){
    next = next * 1103515245 + 12345;
    return (unsigned int)(next/65536) % 32768;
}
    
//srand函数,为rand()函数设置种子值
void srand(unsigned int seed){
    next = seed;
}

然后自以为是的回答了。准备去看今天的新课10。无奈跑了一天睡意渐浓。便在睡前试验了下上面的定义是否真是具体的实现呢:

#include<stdio.h>
#include <stdlib.h>
  
 //自己定义的rand srand函数 
unsigned long int next_ = 1;

int rand_test(void){  
    next_ = next_ * 1103515245 + 12345;
    return (unsigned int)(next_/65536) % 32768;
}
void srand_test(unsigned int seed){
    next_ = seed;
}


int main(){
	//先输出没有用种子值的情况。 
	printf("%d - ",rand_test());
	printf("%d\n\n",rand());  

	int i=0;
	while(i++<20)
    { 
     	srand_test(i);
	 	printf("%d - ",rand_test());
	 	
	 	srand(i);
	 	printf("%d\n",rand());
	
	}
     
return 0;
}

bubuko.com,布布扣

哎呀我去,完全不对。

又自作聪明的右击rand()到实现,艾玛,转到stdlib.h头文件了,最多是个接口展示。没有想要的。

接着搜啊搜啊的,终于如愿。

bubuko.com,布布扣

rand 和 srand 标准库的源码。看的不是很懂。况且还有冒出来的结构成员什么的。

看到srand()确实只是赋值了下。

rand()呢,_getptd()函数先不去管,下面返回这么长。照猫画虎弄过来吧。

#include<stdio.h>
#include <stdlib.h>
  
 //自己定义的rand srand函数 
unsigned long int next_ = 1;


void srand_test(unsigned int seed){
    next_ = seed;
}
int rand_test(void){
    return next_= (((next_ * 214013L + 2531011L) >> 16) & 0x7fff );
}

int main(){
	//先输出没有用种子值的情况。 
	printf("%d - ",rand_test());
	printf("%d\n\n",rand());  

	int i=0;
	while(i++<20)
    { 
     	srand_test(i);
	 	printf("%d - ",rand_test());
	 	
	 	srand(i);
	 	printf("%d\n",rand());
	
	}
     
return 0;
}


bubuko.com,布布扣


    向前走 就这么走
    就算你被给过什么
    向前走 就这么走
    就算你被夺走什么
    向前走 就这么走
    就算会错过什么
    向前走 就这么走
开心的哼起歌~

探秘rand神秘面纱,布布扣,bubuko.com

探秘rand神秘面纱

标签:c   c语言   rand 随机数 标准库   

原文地址:http://blog.csdn.net/u013542256/article/details/38101435

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!