我试图计算排序功能,非常简单。代码如下:
clock_t start_t, end_t, total_t;
start_t = clock();
sort();
end_t = clock();
total_t = (double)(end_t - start_t) / CLOCKS_PER_SEC;
printf("sort time: %le", (double)total_t);
你可以说这很有用。但是,无论需要多长时间,我都会获得整数输出。如果排序1M元素打印出来
sort time: 1.000000e+00
排序2M元素打印出来
sort time: 2.000000e+00
然后对两者之间的任何元素值进行排序将打印这两个输出中的一个。 1.3M元素显然也需要1.000000e + 00秒。
为什么会发生这种情况,更重要的是如何解决?
答案 0 :(得分:4)
您将double
计算的结果分配给total_t
类型的clock_t
,这可能会截断结果,因为clock_t
通常是整数类型(不保证,但在您的机器上看起来如此) - 然后在打印后再回到double
并不重要。
只需将结果存储在double
,as recommended here:
double total = (double)(end - start) / CLOCKS_PER_SEC;
printf("sort time: %le", total);