最近在写一个排队系统的仿真程序,中间因为系统的服务时间和到来时间都是按照指数分布产生的,所以就在网上找了一下,发现没有,也有可以参考的,可是从数学角度分析一下,发现都是错的,哎,求人不如求己,还是自己动手写吧。
代码贴在下面,做点贡献吧,此代码是按照严格的数学关系产生的,在最后附上一个别人写的程序,指出其问题所在。
public static double RandExp(double const_a)//此处的const_a是指数分布的那个参数λ
{
//此处属于技巧,利用GUID产生随机数的种子,模拟真正的随机
Random rand = new Random(Guid.NewGuid().GetHashCode());
double p ;
double temp;
if (const_a != 0)
temp = 1 / const_a;
else
throw new System.InvalidOperationException("除数不能为零!不能产生参数为零的指数分布!");
double randres;
//while((randres = -temp * Math.Log(temp * p, Math.E)) > 0);
//while ((p = rand.Nex