关闭

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

1689人阅读 评论(0) 收藏 举报

        该程序在我的机器上生成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改大些 */
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:34482次
    • 积分:492
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:21篇
    • 译文:1篇
    • 评论:3条
    最新评论
    优秀网站
    有用的网站