用C语言模拟随机数的生成
2014-06-16 20:20
225 查看
函数实现出处:http://baike.baidu.com/view/876758.htm
ftime讲解出处:百度百科 ftime
函数定义:int ftime(struct timeb *tp);
函数说明:ftime()将目前日期由tp所指的结构返回。
tp结构定义:
struct timeb{
time_t time; /* 为1970-01-01至今的秒数*/
unsigned short millitm; /* 千分之一秒即毫秒 */
short timezonel; /* 为目前时区和Greenwich相差的时间,单位为分钟 */
short dstflag; /* 为日光节约时间的修正状态,如果为非0代表启用日光节约时间修正 */
};
返回值 :无论成功或失败都返回0
在函数里,我增加了一些注释,希望大家能看得懂 。
有些人可能会觉得为什么不直接用Initial()函数的返回值就好了,这是因为Initial()函数里是通过 timeb作为种子,因为 timeb 是返回现在与1970.1.1午夜后的时间差,单位是毫秒,而计算机的执行速度很快,执行我们的这个小程序甚至不需要一毫秒,所以给出的数值都会很接近,甚至相同。
该程序的实现也是一个伪随机数。
事实上,在查找资料时,还发现有有另外一种实现方法,该方法较安全,且随机性较大,但较为复杂。有兴趣的可以看一下这个帖子:http://bbs.csdn.net/topics/80515171
ftime讲解出处:百度百科 ftime
函数定义:int ftime(struct timeb *tp);
函数说明:ftime()将目前日期由tp所指的结构返回。
tp结构定义:
struct timeb{
time_t time; /* 为1970-01-01至今的秒数*/
unsigned short millitm; /* 千分之一秒即毫秒 */
short timezonel; /* 为目前时区和Greenwich相差的时间,单位为分钟 */
short dstflag; /* 为日光节约时间的修正状态,如果为非0代表启用日光节约时间修正 */
};
返回值 :无论成功或失败都返回0
在函数里,我增加了一些注释,希望大家能看得懂 。
有些人可能会觉得为什么不直接用Initial()函数的返回值就好了,这是因为Initial()函数里是通过 timeb作为种子,因为 timeb 是返回现在与1970.1.1午夜后的时间差,单位是毫秒,而计算机的执行速度很快,执行我们的这个小程序甚至不需要一毫秒,所以给出的数值都会很接近,甚至相同。
该程序的实现也是一个伪随机数。
事实上,在查找资料时,还发现有有另外一种实现方法,该方法较安全,且随机性较大,但较为复杂。有兴趣的可以看一下这个帖子:http://bbs.csdn.net/topics/80515171
#include<stdio.h> #include<sys/timeb.h> #include<time.h> #include<stdlib.h> //用于返回随机数初值 double Initial() { double init; struct timeb tp; while(true) { ftime(&tp); init=tp.millitm*0.9876543*0.001; //tp.millitm的取值范围是 0-999 //因此这边init的取值应该是 [0,0.987654321) if(init>=0.001) { break; } } return init; } //返回一个(0 , 1)随机数 double Random() { static double rndm=-1.0; if(rndm==-1.0) rndm=Initial(); else rndm=3.99*rndm*(1.0-rndm); // 0<(rndm*(1-radm))<=0.25 可以用二次函数证明 return rndm; } int main() { /* 系统自带生成,产生[0,4]随机数*/ /* srand((int)time(0)); for(int i=0;i<5;i++) { printf("%d ",rand()%5); }*/ int t=0; while(t++<10) printf("%lf %lf\n", Random(), Initial()); getchar(); return 0; }
相关文章推荐
- 【转】关于C语言生成不重复的随机数
- C语言--生成正态分布随机数
- C语言生成随机数保存在文件中
- C语言生成随机数
- c语言: 生成随机数
- C语言随机数生成的线程无关性
- c语言中随机数生成
- C语言生成随机数
- c语言生成随机数数组
- C语言生成随机数
- C语言区间随机数生成 with srand() & rand() & time()
- C语言--模拟生成一注双色球结果
- c语言编写的生成泊松分布随机数
- 在C语言如何利用srand()和随机数函数rand()生成随机数
- C语言生成随机数
- C语言随机数生成
- C语言区间随机数生成 with srand() & rand() & time() (转)
- C语言利用OPENSSL 生成定制位的随机数
- c语言中如何生成1个0到1的随机数
- C语言编程中生成随机数的入门教程