我在C++中構建了一個模擬器,並且我有一個指數生成器來創建進程的突發時間。指數發生器有時會給出「奇怪」的結果
通常它會返回值:3.14707,1.04998。但經常1/10場合,號碼轉出:2.64823e-307
這是發電機(我用srand (time(NULL));
在節目的開頭)的代碼:
double exponential(float u)
{
double x,mean;
mean = 10;
// generate a U(0,1) random variate
x = rand();
u = x/RAND_MAX;
return (-mean * log(u));
}
這是怎麼我分配值。該while
部分裏面是我的努力擺脫這樣的值,但沒有奏效:
for (int i = 0; i < nPages; i++)
{
index[i] = i;
arrival[i]= poisson(r);
burst[i]=exponential(u);
while (burst[i]<1 || burst[i]>150)
{
cout<<"P"<<i<<endl;
burst[i]=(burst[i-1]+burst[i+1])/2;
}
}
'float u'在'double exponential(float u)'中的作用是什麼。 你正在覆蓋它是有價值的。 –
如果rand()返回0,該怎麼辦? (['log(0)'返回'HUGE_VAL'](http://en.cppreference.com/w/cpp/numeric/math/log)) – dyp
如果rand()返回RAND_MAX或close到它?你返回'0'或接近它。 – David