c语言中均匀分布的函数 c语言中均匀分布的函数有哪些

怎么用c语言实现给出一个整数n输出n个0-1之间的服从均匀分布的数 。。。。求大神们帮忙啦楼上的基本思路是对的,但是程序写的有问题啊~~~~
#includestdio.h
#includestdlib.h
#includetime.h
int main(){
int n;
int i;
printf("输入n\n");
scanf("%d", n);
srand((int)time(NULL));//用当前时间做随机数种子, 可使得每次运行程序产生的随机数都不相同
for(i=0; in; i++)//这里按照提问者的要求应该写n,意思是输出n个数
printf("%-4d", rand()%2); //这里按照提问者的要求应该写%2,表示随机出的数是0或者1
return 0;
}
c语言random()的问题srand((int)time(NULL))用于设定随机数种子 。rand()%100,产生0-99的随机数 。如果要产生16-59之间的数,可以这样写:rand()%44+16(这里44由59-16+1得到) 。其他情况与此雷同 。
rand()是不能产生真正的随机数的 。即使不能产生真正的随机数,也要大概接近 。而rand()好象每次的随机都一样 。之所以rand()每次的随机数都一样是因为rand()函数使用不正确 。
各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值 , 当序列足够长,这组数值近似满足均匀分布 。
扩展资料
调用随机数函数 rand()() 的时候, 实际得到的这个随机数并不是绝对随机的,它是以一个初始值,通过一个算法,计算出来的“伪随机数"数列,每次调用rand()()时,从这个数列依次取出一个值,做为随机数 。
这个初始的值就是"随机数种子", 也就是说 , 如果随机数种子相同,计算出的随机数数列是相同的 。而srand()om( x) 这个函数就是初始化随机数产生器,设定随机数种子用的 。给定的x的就是随机数种子 。可以验证,当你多次调用srandm(x)时,如果x取值相同,则得到的随机数数列是一样的 。
【c语言中均匀分布的函数 c语言中均匀分布的函数有哪些】所以 , 若我们每次运行程序时,要得到不同的随机数序列,就应该用不同的种子来初始化这个随机数产生器 。比如说,用时间初始化它,或者用getpid(),用进程的pid号初始化,由于每次运行程序时,它的pid号一般是不同的,所以能够产生不同的随机数序列 。
如何用C语言产生0到1之间的随机数?方法一c语言中均匀分布的函数:
1、功能:
产生0到1之间均匀分布c语言中均匀分布的函数的一个随机数
2、方法说明:
设m=216c语言中均匀分布的函数,产生产生0到1之间均匀分布的一个随机数的计算公式如下:
ri=mod(2053ri-1
+13849,m),i=1,2,3……
pi
=ri/m
例:连续产生10个0到1之间均匀分布的一个随机数。r的初值取5.0
#include "stdio.h"
double rnd1(double *r)
{ int m;
double s,u,v,p;
s=65536.0; u=2053.0; v=13849.0;
m=(int)(*r/s); *r=*r-m*s;
*r=u*(*r)+v; m=(int)(*r/s);
*r=*r-m*s; p=*r/s;
return(p);
}
main()
{ int i;
double r;
r=5.0;
printf("\n");
for (i=0; i=9; i++)
printf("%10.7lf\n",rnd1(r));
printf("\n");
getch();
}方法二:
float
b=rand()/(RAND_MAX+1.0);
printf("%f\n",b);
注释:
stdlib.h头文件中有宏#define
RAND_MAX
0x7fff
rand()产生一个0到0x7ffff即0到32767之间的随机数
rand()/(RAND_MAX+1.0)就等于一个0到1之间的小数了,因为rand()最大是32767最小是0,再除以32768就是一个0到1之间的小数(不能等于1),再乘以10就是一个0到10之间的数了(不等于10).最后再加1,就成了一个求1到10之间随机数的式子了.
均匀分布的分布函数怎么求均匀分布的分布函数怎么求介绍如下:

推荐阅读