奇怪的 clock_t

2019-04-04 20:00:50 +08:00
 dhxsy1994
 11 int main()
 12
 13 {
 14     clock_t start;
 15     clock_t end;
 16
 17     start = clock();
 18     sleep(10);
 19     end = clock();
 20
 21     double total;
 22      total = (double)((end - start) / CLOCKS_PER_SEC);
 23     printf("total = %f\n",total);
 24 }
 25

这样写代码居然输出是 0.000000 把老板的 FPGA 速度测错了,我觉得我老板会降低对我的印象了 唉

2487 次点击
所在节点    C
5 条回复
zmj1316
2019-04-04 20:19:55 +08:00
🤣不自己先试一下的吗
jackmod
2019-04-04 20:22:42 +08:00
位置不对,要这样写:
(double)(end - start) / CLOCKS_PER_SEC

(end - start) 是整数,先转换它,而不是先除以一个巨大的数字再转换。
HFcbyqP0iVO5KM05
2019-04-04 20:24:21 +08:00
sleep 也有可能被 interrupt 导致提前返回,此时返回的是剩余的时间
jackmod
2019-04-04 20:34:25 +08:00
然而我用 clock 得到的结果也不对(以前似乎遇到过这个问题来着),考虑换用 clock_gettime 吧。
https://linux.die.net/man/3/clock_gettime
https://gist.github.com/pfigue/9ce8a2c0b14a2542acd7
ryd994
2019-04-05 00:35:08 +08:00
本来就应该用 gettime 这种情况下应该用 CLOCK_MONOTONIC

其实你的问题我觉得 2 楼已经讲清楚了
应该用浮点除法而不是整数除

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/552181

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX