我已经开始创建一个c ++程序来模拟像FiFo这样的作业调度算法。我还远未完成,但现在我的主要问题是如何在我的程序中创建时间流。
这是我目前的主要代码:
for (i = 1; i < 10; i++)
{
Time1 = clock();
//this is the alogrithm to generate poisson arrival sequence
do{
k = k + 1;
// Generate a random number between 0 and 1
// return a uniform number in [0,1].
double u = rand() / (double)RAND_MAX;
p = p * u;
}while (p > L);
A[i] = k-1;
Time2 = clock();
DT = Time2 -Time1;
TotalTime=TotalTime + DT;
cout << " Total time " << TotalTime
<< " table :" << A[i]
<< " Arrival Time "
<< TotalTime <<endl ;
我的主要问题是: 我用时钟测量单位的时间是从clock()函数输出的时间单位是“怪异”数字。我应该使用其他功能吗?
10次迭代的结果
Total time 6.19522e+032 table :28 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :29 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :30 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :31 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :32 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :33 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :34 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :35 Arrival Time 6.19522e+032
Total time 6.19522e+032 table :36 Arrival Time 6.19522e+032
PS :如果您想在自己的计算机上运行代码,我可以提供其余的代码。
答案 0 :(得分:1)
作为“离散事件”模拟,作业调度将变得更加容易。查看此tutorial paper以了解如何构建此类模型。本文中的框架是用Java编写的(并且也在Ruby中实现),但是可以直接移植到C ++。
答案 1 :(得分:0)
所以第一点是clock()返回一个clock_t变量,所以虽然我认为它不会真的有太大不同,但是让Time1和Time2属于clock_t类型。至于主要问题和评论,看起来你只是忘了将TotalTime初始化为零,这可以解释巨大的数字。
如果输出全为零,那么循环可能运行得非常快,但您也可以使用setprecision增加输出的小数位数。运行以下代码以查看差异,cout.setprecision(int value)将确定要显示的小数位数。
#include <iostream>
int main() {
double d = 1.0/3.0;
std::cout.precision(15);
std::cout << d << std::endl;
std::cout.precision(3);
std::cout << d;
return 0;
}