c语言实现排队论算法,程序结果几乎都是 #INDOOL,是不是数据溢出了?

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

一下是计算排队论中M/M/C模型的相关参数:

/* Note:Your choice is C IDE */

#include "stdio.h"

#include "math.h"

double ma=177.0,mb=235.0;

double la=27.027,lb=25.0,p0,ua,ub,u1=1.714,u2=1.500,u3=1.333,u4=2.000;

double pn(double n,double c,double m,double l,double u)//计算Pn的子函数

{ double i;

double pn,z,x;//z是分子(m!),x是分母

i=m-1.0;

z=m;

while(i>1.0)//计算m!

z*=i--;

i=m-n-1.0;

if(i==-1.0)

x=1.0; //0!=1

else

while(i>1.0)//计算(m-n)!

x*=i--;

if(n<=c)

{

i=n;

while(i>1.0)//计算(m-n)!*n!

x*=i--;

pn=z*pow(l/u,n)*p0/x;

}

else

{

i=c;

while(i>1)//计算c!

x*=i--;

x*=pow(c,n-c);

pn=z*pow(l/u,n)*p0/x;

}

return(pn);

}

void main()

{

double k,ca,cb,x1,x2,x3,x4,n,i,x,ax1,ax2,ax3,ax4;

double pa,pb,p0,lsa=0.0,lqa=0.0,la_,lb_,wqa,wqb,y1,y2,y,z1,z2,z,lsb=0.0,lqb=0.0,aver=1000.0;

for(x1=0.0,x2=10.0-x1;x1<=10.0;x1++) //对于A类展开计算

for(x3=0.0,x4=6.0-x3;x3<=6.0;x3++)

{ y=0.0;z=0.0; //累加器清零

ua=(x1+x3)*u1*u3/(x1*u3+x3*u1);

ub=(x2+x4)*u2*u4/(x2*u4+x4*u2);

ca=x1+x3;cb=x2+x4;

i=ma-1;

x=ma;

while(i>1)//计算m!

x*=i--;

pa=ma*la/(ca*ua);printf("pa=%lf\n",pa);

for(k=0;k<=ca;k++)//计算P0的分母第一项

{

i=k-1;

y1=k;

while(i>1)//计算k!

y1*=i--;

i=ma-k-1;y2=ma-k;

if(i==-1)

y2=1; //0!=1

else

while(i>1)//计算(m-k)!

y2*=i--;

y+=pow(ca*pa/ma,k)/(y1*y2);

}

i=ca-1;

z1=ca;

while(i>1)//计算ca!

z1*=i--;

z1=pow(ca,ca)/z1;

for(k=ca+1;k<=ma;k++)//计算P0的分母第二项

{

i=ma-k-1;z2=ma-k;

if(i==-1)

z2=1; //0!=1

else

while(i>1)//计算(m-k)!

z2*=i--;

z+=pow(pa/ma,k)/z2;

}

p0=1/(x*(y+z1*z));printf("p0=%lf",p0);

for(n=1;n<=ma;n++)

lsa+=n*pn(n,ca,ma,la,ua);

printf("lsa=%lf\n",lsa);//计算A类的平均队长

for(n=ca+1;n<=ma;n++)

lqa+=(n-ca)*pn(n,ca,ma,la,ua);//计算A类的平均等待队长

la_=la*(ma-lsa);//计算A类的有效到达率

printf("lea=%lf\n",la_);

wqa=lqa/la_;

y=0.0;z=0.0; //累加器清零

i=mb-1;

x=mb;

while(i>1)//计算m!

x*=i--;

pb=mb*lb/(cb*ub);printf("pb=%lf",pb);

for(k=0;k<=cb;k++)//计算P0的分母第一项

{

i=k-1;

y1=k;

while(i>1)//计算k!

y1*=i--;

i=mb-k-1;y2=mb-k;

if(i==-1)

y2=1; //0!=1

else

while(i>1)//计算(m-k)!

y2*=i--;

y+=pow(cb*pb/mb,k)/(y1*y2);

}

i=cb-1;

z1=cb;

while(i>1)//计算ca!

z1*=i--;

z1=pow(cb,cb)/z1;

for(k=cb+1;k<=mb;k++)//计算P0的分母第二项

{

i=mb-k-1;z2=mb-k;

if(i==-1)

z2=1; //0!=1

else

while(i>1)//计算(m-k)!

z2*=i--;

z+=pow(pb/mb,k)/z2;

}

p0=1.0/(x*(y+z1*z));printf("p0=%lf",p0);

for(n=1.0;n<=mb;n++)

lsb+=n*pn(n,cb,mb,lb,ub);printf("lsb=%lf\n",lsb);//计算B类的平均队长

for(n=cb+1.0;n<=mb;n++)

lqb+=(n-cb)*pn(n,cb,mb,lb,ub);//计算B类的平均等待队长

lb_=lb*(mb-lsb);//计算B类的有效到达率

printf("leb=%lf\n",lb_);

wqb=lqb/lb_;

if(((wqa+wqb)/2.0)

{

aver=(wqa+wqb)/2.0;//求平均等待时间的期望最小值

ax1=x1;ax2=x2;ax3=x3;ax4=x4;//并记录此时A、B救治单元的分配情况

}

}

printf("x1=%lf,x2=%lf,x3=%lf,x4=%lf,aver=%lf",ax1,ax2,ax3,ax4,aver);

}

求高手帮忙

91aaaaa268093e98a374e6fe2be03ccb.gif,是不是编译器不给力啊,我用的是C语言学习系统,不是VC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值