为什么 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);
我正在尝试计时排序功能,非常简单的东西。代码如下:
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);