您的位置:首页 > 其它

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

2006-05-28 21:07 316 查看
        该程序在我的机器上生成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改大些 */
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息