while文でcurrent_time<360の間ループして処理をするはずなのですが、current_timeが360以上になっていないのに、処理が終了してしまいます。
何が、いけないのでしょうか?もし宜しければ、アドバイスよろしくお願いします。
codeタグをご利用ください。 投稿前にはプレビューで確認を。 by softya(ソフト屋)
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
double exprand(double t,double r);
int main (void)
{
int count=2,fake_time,counter1=0,counter2=0,time=0,i=0,a=12869,c=6925;
int y,current_time=0,current_time1,current_time2; /*来店時間変数*/
int m=1,se_avg,x,x1; /*サービス時間変数*/
int* pt;
int* pt1;
int* pt2;
int* pt3;
double y1,y2,r,come_time=0,co_ave=0; /*来店時間変数*/
double r1,r2,z1,z2,z3,service_time=0; /*サービス時間変数*/
x=1;
x1=1111;
se_avg=5;
y=12;
co_ave=3;
pt = (int*)calloc(i, sizeof(int)); /*窓口1の到着時間間隔*/
pt1 = (int*)calloc(i, sizeof(int));/*窓口1のサービス時間間隔*/
pt2 = (int*)calloc(i, sizeof(int));/*窓口2の到着時間間隔*/
pt3 = (int*)calloc(i, sizeof(int));/*窓口2のサービス時間間隔*/
y1=(a*y+c)%16384; /*来店時間間隔乱数生成*/
y=y1;
y2=y1/16384;
r=((1/(1/co_ave)) * -log(y2));
come_time=come_time+r;
printf("r=%f\n\n",r);
r=(int)r;
*(pt+i)=r;
while(current_time < 360){
printf("current_time=%d\n",current_time);
i++;
if(counter1==0 && counter2==1){ /*窓口1のみ空いている時*/
counter1=1;
r1=(a*x+c)%16384; /*サービス時間乱数生成*/
r2=(a*x1+c)%16384;
x=r1;
x1=r2;
r1=(r1/16384); /*乱数を16384で除算し、[0,1]の範囲に*/
r2=(r2/16384);
z1=sqrt(-2.0*log(r1))*cos(2*3.141592653589793*r2); /*サービス時間*/
z1=(z1*m+se_avg);
z2=sqrt(-2.0*log(r1))*sin(2*3.141592653589793*r2); /*サービス時間*/
z2=(z2*m+se_avg);
z3=(z1+z2)/2;
printf("z3=%f\n\n",z3);
service_time=service_time+z3;
current_time1=current_time-(time)+r;
if(current_time1>current_time2){
current_time=current_time1;
counter2=0;
}else if(current_time1<current_time2){
current_time=current_time2;
counter1=0;
time=current_time-current_time1;
}else{
current_time=current_time1;
counter1=0;
counter2=0;
}
current_time1=current_time1+z3;
y1=(a*y+c)%16384; /*来店時間間隔乱数生成*/
y=y1;
y2=y1/16384;
r=((1/(1/co_ave)) * -log(y2));
come_time=come_time+r;
printf("r=%f\n\n",r);
r=(int)r;
*(pt+i)=r;
}else if(counter1==1 && counter2==0){ /*窓口2のみが空いている時*/
counter2=1;
r1=(a*x+c)%16384; /*サービス時間乱数生成*/
r2=(a*x1+c)%16384;
x=r1;
x1=r2;
r1=(r1/16384); /*乱数を16384で除算し、[0,1]の範囲に*/
r2=(r2/16384);
z1=sqrt(-2.0*log(r1))*cos(2*3.141592653589793*r2); /*サービス時間*/
z1=(z1*m+se_avg);
z2=sqrt(-2.0*log(r1))*sin(2*3.141592653589793*r2); /*サービス時間*/
z2=(z2*m+se_avg);
z3=(z1+z2)/2;
printf("z3=%f\n\n",z3);
service_time=service_time+z3;
z3=(int)z3;
current_time2=current_time+r;
if(current_time1>current_time2+z3){
current_time=current_time1;
time=current_time-current_time2;
counter1=0;
}else if(current_time1<current_time2+z3){
current_time=current_time2;
counter2=0;
}else{
current_time=current_time1;
counter1=0;
counter2=0;
}
current_time2=current_time2+z3;
y1=(a*y+c)%16384; /*来店時間間隔乱数生成*/
y=y1;
y2=y1/16384;
r=((1/(1/co_ave)) * -log(y2));
come_time=come_time+r;
printf("r=%f\n\n",r);
r=(int)r;
*(pt+i)=r;
}else{ /*窓口1、2共に空いている時*/
r1=(a*x+c)%16384; /*サービス時間乱数生成*/
r2=(a*x1+c)%16384;
x=r1;
x1=r2;
r1=(r1/16384); /*乱数を16384で除算し、[0,1]の範囲に*/
r2=(r2/16384);
z1=sqrt(-2.0*log(r1))*cos(2*3.141592653589793*r2); /*サービス時間*/
z1=(z1*m+se_avg);
z2=sqrt(-2.0*log(r1))*sin(2*3.141592653589793*r2); /*サービス時間*/
z2=(z2*m+se_avg);
z3=(z1+z2)/2;
printf("z3=%f\n\n",z3);
service_time=service_time+z3;
z3=(int)z3;
if(count%2==0){
count++;
counter1=1;
current_time1=current_time1+r;
if(current_time1>current_time2){
current_time=current_time1;
time=0;
}else if(current_time1<current_time2){
current_time=current_time2;
time=0;
}else{
current_time=current_time1;
}
current_time1=current_time1+z3;
}else{
count++;
counter2=1;
current_time2=current_time2+r;
if(current_time1>current_time2){
current_time=current_time1;
}else{
current_time=current_time2;
}
current_time2=current_time2+z3;
}
y1=(a*y+c)%16384; /*来店時間間隔乱数生成*/
y=y1;
y2=y1/16384;
r=((1/(1/co_ave)) * -log(y2));
come_time=come_time+r;
printf("r=%f\n\n",r);
r=(int)r;
*(pt+i)=r;
}
printf("i=%d\n",i);
printf("来店時間間隔=%f\n",come_time/i);
printf("サービス時間=%f\n",service_time/i);
}
return 0;
}