为什么 clock_t 只给我 C 中的整数

Why does clock_t only give me integers in C

我正在尝试计时排序功能,非常简单的东西。代码如下:

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

然后对两者之间的元素的任何值进行排序将打印这两个输出之一。 130 万个元素显然也需要 1.000000e+00 秒。

为什么会发生这种情况,更重要的是我该如何解决?

您将 double 计算的结果分配给 clock_t 类型的 total_t,这可能会截断结果,因为 clock_t 通常 一个整数类型(不能保证,但在你的机器上似乎是这样) - 之后你在打印时转换回 double 并不重要。

只需将结果存储在 double 中,as recommended here:

double total = (double)(end - start) / CLOCKS_PER_SEC;
printf("sort time: %le", total);