C语言:产生随机数 求高手指导!!!
要求:(1)满足均匀分布的[M,N]区间随机数,其中M,N是正整数。 (2) 满足指数分布的[M,N]区间随机数,其中M,N是正整数。
追问:我想要的C语言的编写,谢谢
要求:(1)满足均匀分布的[M,N]区间随机数,其中M,N是正整数。 (2) 满足指数分布的[M,N]区间随机数,其中M,N是正整数。
追问:我想要的C语言的编写,谢谢
答案:我这里给出M,N是double 的通用程序。(m < n ).
随机数也是double,你若要整数自己取整。
指数分布,假定指数分布函数曲线是:
f(x)=LAM * exp(-LAM*x);
LAM 是 指数分布函数 参数。你要自己给定,我这里给了1.2。
#include <stdio.h>
#include <stdlib.h>
#include <time.h> // 别忘了 要 time.h
#include <math.h> // 别忘了 要 math.h
// 均匀分布的随机数
double rd_MN1(double m,double n)
{
double r;
if (m>n) {r=n;n=m;m=r;};
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
r = m + r * (n-m);
return r;
}
void main()
{
long int i,k;
double m,n;
double x, r;
double y;
double LAM=1.2; //f(x)=LAM*exp(-LAM*x);
m=2.0; n=5.0;
srand((unsigned)time(NULL)); // 随机种子
for (i=0;i<50;i++)
printf("%lf ", rd_MN1(m,n));
printf("\n==========\n");
srand((unsigned)time(NULL));
k=0;
loop:
r = ( (double)rand() / ((double)(RAND_MAX)+(double)(1)) );
y = -log(r) / LAM;
if (y >= m && y <= n) {printf("%lf ",y); k++;};
if (k < 50) goto loop; // 产生50个指数分布随机数
}
其他:http://www.pudn.com/downloads166/sourcecode/others/detail763438.html rand(int n)函数产生一个四位正整数,用rand()%(n-m)结果为一个[0,n-m)的数,rand()%(n-m)+m结果为一个[m,n)的数,然后再加1就为[m,n]之间的数。 下面这个程序中你可以参考一下: http://read.pudn.com/downloads166/sourcecode/others/763438/SIMULIB.C__.htm
上一个:C语言数组问题
下一个:跪求C语言 在线等 灰常急!!!!!