0

我已经开始创建一个 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 ; 

我的主要问题是:我的时钟时间测量单位是时钟()函数输出的时间单位是“奇怪”的数字。我应该使用其他功能吗?

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:如果你想在你的机器上运行它,我可以提供其余的代码。

4

2 回答 2

1

作为“离散事件”模拟,作业调度会容易得多。查看本教程文件,了解如何构建此类模型。论文中的框架是用 Java 编写的(也已经用 Ruby 实现了),但可以直接移植到 C++。

于 2013-07-20T18:01:48.650 回答
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;
}
于 2013-07-20T11:10:55.030 回答