标签: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;
}
#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;
}
哎呀我去,完全不对。
又自作聪明的右击rand()到实现,艾玛,转到stdlib.h头文件了,最多是个接口展示。没有想要的。
接着搜啊搜啊的,终于如愿。
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;
}
向前走 就这么走
就算你被给过什么
向前走 就这么走
就算你被夺走什么
向前走 就这么走
就算会错过什么
向前走 就这么走
开心的哼起歌~标签:c c语言 rand 随机数 标准库
原文地址:http://blog.csdn.net/u013542256/article/details/38101435