2014-08-28 59 views
0

任何人都可以告诉我,如果我错过下面两行会发生什么?c程序计算执行时间错误?

time_spent = (double)(end - begin)/CLOCKS_PER_SEC; 

我试图计算运行我的排序问题的时候,忘了强制转换为加倍。代码运行了将近90分钟,但输出时间为“270.000006”。任何人都可以请帮助我弄清楚这个270表示什么?

此外它有时会显示“-ve”值。任何解决这个问题的方法。

编辑 - 我排序10^9和10^10的数字,所以代码将运行几个小时。

+0

你如何得到最终值和开始值以及它们是什么类型? – 2014-08-28 08:15:08

+0

我已经使用了Debasish在下面提到的相同的代码。 – Anurag 2014-08-28 08:42:39

回答

5

如果代码运行将近90分钟,您将在32分钟的体系结构中在72分钟内溢出clock_t类型。我确实相信这是你的情况。

+0

是否有避免这种溢出? – Anurag 2014-08-28 08:41:27

+0

@Auurag在你已经完成的运行中,我猜你可以试着弄清楚它溢出了多少(猜测溢出了“一次”),然后假设它的值+最大值。为了将来修复,你当然必须将它保存到一个可以适合结果的变量。 – Jite 2014-08-28 08:51:54

+0

@Jite。将长期双重工作罚款? – Anurag 2014-08-28 08:55:18

0

正确的用法是:

clock_t begin, end; 
    double time_spent; 

    begin = clock(); 
    /* actual task that needs to be monitored */ 
    end = clock(); 
    time_spent = (double)(end - begin)/CLOCKS_PER_SEC; // in seconds 

您在这里测量CPU时间,而不是经过的时间,其中包括I/O时间为好。 CLOCKS_PER_SEC是一个在其中声明的常量。计算需要在浮点运算中完成。 计算计时的另一种方法是使用时间命令。

阅读How to log the time taken for a unix command?

+0

他知道,这不是他要求的。他问,如果他**不会**将它/类型转换为双精度型,会发生什么情况。 – Jite 2014-08-28 08:31:38

+0

如果你没有进行双倍转换,那么由于整数运算,你会失去精度 – 2014-08-28 08:35:34

+0

是或者更坏,会溢出,这更像是他的问题的答案。 – Jite 2014-08-28 08:49:03