均匀分布随机数产生的程序

转载 2006年05月28日 21:07:00

        该程序在我的机器上生成10万以内效果很好。如果需要更大的随机数,只要把程序中# define Times 50的50改大,当然运行时间就会更长了。

/* 
程序名:SJS.C
功能:生成一个随机数
命令格式: SJS  下限  上限
输出:一个均匀分布的随机数和次数
操作系统:DOS、WINDOWS
编译器:DOS下的C语言编译器,如TC等
*/

# include <stdio.h>
# define Times 50  /*  时钟计数器到下一个Times的倍数时,计数停止 */
void main(int n,char *v[])
{
int flag1,flag2;
long min,max,k,m,t,max0,max1,t1;
long tmp;      /*  临时变量  */
long far *time0;
if(n!=3)
{
puts("SJS  下限  上限"); 
return;
}
sscanf(v[1],"%ld",&min);  /*  下限  */
sscanf(v[2],"%ld",&max);  /*  上限  */
time0 = (long far *) 0x0000046c;  /* 时钟计数器的地址  */
k = 0;
m=0;
max0 = max -min;  /* 2倍长度,数字从最小数到最大,再从最大数到最小 */
max1=max0+max0;
t = *time0;  /* 起始时间 */

while(1)
{
t1=*time0;  /* 当前时间 */
flag1=(t != t1);
flag2=(t1 % Times == 0);
if(flag1 && flag2)
break;
k++;
if(k > max1)
{
k=0;
m++;  /*  数完了m次 */
}
else
{
tmp=0;
tmp++; /*  为了和k > max1的计算时间相同,也写两个没用的操作  */
}
}
if(k>max0)
k = max1 - k;  /* 从min数到max,再从max数回min */
printf("随机数是:%ld,共数了%ld遍/n",min+k,m);  
/* 如果试了几次,m没超过1, 则需要把Times改大些 */
}

相关文章推荐

通过均匀分布随机数产生器获得一个高斯分布随机数产生器

通过均匀分布随机数产生器获得一个高斯分布随机数产生器

使用均匀分布随机数产生器构造任意分布的随机数产生器

使用均匀分布随机数产生器构造任意分布的随机数产生器

MATLAB产生连续均匀分布的随机数组——unifrnd

unifrnd可以创建随机的连续均匀分布的数组。 1.R = unifrnd(A,B) returns an array of random numbers chosen from the con...

推导:通过均匀分布来产生任意分布随机数

最近想用C语言写一个产生服从指数分布的随机数的程序。从网上找了找,发现可以通过均匀分布来产生服从任意分布的随机数。然而,网上的推导不是很完善,我把自己的理解写在这里,有不严谨的地方请大家指正。

【算法分析】随机数的生成:均匀分布、正态、泊松 、瑞利

不使用系统提供的随机数,利用其它算法产生。

C++均匀分布U(0,1)的随机数

这里来继续探讨C++中的随机数生成问题,这里主要探讨一下均匀分布的生成,均匀分布是可以说是其他的随机生成的基础,同时要注意的这也是一个世界难题,所以实际中使用的均匀分布U(0,1)跟C++ 中的ran...

C语言与数字信号处理——均匀分布的随机数

分别用C语言和matlab语言生成随机数,并对比概率密度估计。

概率算法-均匀分布产生正态分布

大部分语言只能产生均匀分布的随机数。C语言用(double)rand()/RAND_MAX产生0到1之间均匀分布的随机数。那么如何产生正态分布的呢? 一般,一种概率分布,如果其分布函数为y=F(x)...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)